Skip to content

Commit 33e7b28

Browse files
committed
Fix data race in the ProgramManager::getOrCreateDeviceKernelInfo
1 parent 777f38d commit 33e7b28

File tree

2 files changed

+5
-0
lines changed

2 files changed

+5
-0
lines changed

sycl/source/detail/program_manager/program_manager.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,7 @@ ProgramManager::kernelImplicitLocalArgPos(KernelNameStrRefT KernelName) const {
18221822

18231823
DeviceKernelInfo &ProgramManager::getOrCreateDeviceKernelInfo(
18241824
const CompileTimeKernelInfoTy &Info) {
1825+
std::lock_guard<std::mutex> Guard(m_DeviceKernelInfoMapMutex);
18251826
auto Result =
18261827
m_DeviceKernelInfoMap.try_emplace(KernelNameStrT{Info.Name.data()}, Info);
18271828
Result.first->second.setCompileTimeInfoIfNeeded(Info);
@@ -1830,6 +1831,7 @@ DeviceKernelInfo &ProgramManager::getOrCreateDeviceKernelInfo(
18301831

18311832
DeviceKernelInfo &
18321833
ProgramManager::getOrCreateDeviceKernelInfo(KernelNameStrRefT KernelName) {
1834+
std::lock_guard<std::mutex> Guard(m_DeviceKernelInfoMapMutex);
18331835
auto Result = m_DeviceKernelInfoMap.try_emplace(
18341836
KernelName, CompileTimeKernelInfoTy{std::string_view(KernelName)});
18351837
return Result.first->second;

sycl/source/detail/program_manager/program_manager.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,9 @@ class ProgramManager {
540540
// by caching the pointers when possible.
541541
std::unordered_map<KernelNameStrT, DeviceKernelInfo> m_DeviceKernelInfoMap;
542542

543+
// Protects m_DeviceKernelInfoMap.
544+
std::mutex m_DeviceKernelInfoMapMutex;
545+
543546
// Sanitizer type used in device image
544547
SanitizerType m_SanitizerFoundInImage;
545548

0 commit comments

Comments
 (0)