diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index f1a84b92b622e..d1dbac8460959 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -1822,6 +1822,7 @@ ProgramManager::kernelImplicitLocalArgPos(KernelNameStrRefT KernelName) const { DeviceKernelInfo &ProgramManager::getOrCreateDeviceKernelInfo( const CompileTimeKernelInfoTy &Info) { + std::lock_guard Guard(m_DeviceKernelInfoMapMutex); auto Result = m_DeviceKernelInfoMap.try_emplace(KernelNameStrT{Info.Name.data()}, Info); Result.first->second.setCompileTimeInfoIfNeeded(Info); @@ -1830,6 +1831,7 @@ DeviceKernelInfo &ProgramManager::getOrCreateDeviceKernelInfo( DeviceKernelInfo & ProgramManager::getOrCreateDeviceKernelInfo(KernelNameStrRefT KernelName) { + std::lock_guard Guard(m_DeviceKernelInfoMapMutex); auto Result = m_DeviceKernelInfoMap.try_emplace( KernelName, CompileTimeKernelInfoTy{std::string_view(KernelName)}); return Result.first->second; @@ -2137,6 +2139,9 @@ void ProgramManager::removeImages(sycl_device_binaries DeviceBinary) { // Acquire lock to read and modify maps for kernel bundles std::lock_guard KernelIDsGuard(m_KernelIDsMutex); + // Acquire lock to erase DeviceKernelInfoMap + std::lock_guard Guard(m_DeviceKernelInfoMapMutex); + for (int I = 0; I < DeviceBinary->NumDeviceBinaries; I++) { sycl_device_binary RawImg = &(DeviceBinary->DeviceBinaries[I]); diff --git a/sycl/source/detail/program_manager/program_manager.hpp b/sycl/source/detail/program_manager/program_manager.hpp index 63a1a61b55c6c..fd1a686bf14b0 100644 --- a/sycl/source/detail/program_manager/program_manager.hpp +++ b/sycl/source/detail/program_manager/program_manager.hpp @@ -540,6 +540,9 @@ class ProgramManager { // by caching the pointers when possible. std::unordered_map m_DeviceKernelInfoMap; + // Protects m_DeviceKernelInfoMap. + std::mutex m_DeviceKernelInfoMapMutex; + // Sanitizer type used in device image SanitizerType m_SanitizerFoundInImage;