From 5b754411478391864000bebbd8629c84b606206b Mon Sep 17 00:00:00 2001 From: Dmitry Vodopyanov Date: Tue, 7 Jul 2020 14:40:57 +0300 Subject: [PATCH 1/2] [SYCL] Fix segmentation fault in program manager Signed-off-by: Dmitry Vodopyanov --- sycl/source/detail/program_manager/program_manager.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index 2867b70e57d8a..4760d048fc87a 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -288,7 +288,7 @@ static const char *getFormatStr(RT::PiDeviceBinaryType Format) { } RT::PiProgram ProgramManager::createPIProgram(const RTDeviceBinaryImage &Img, - const context &Context) { + const context &Context) { if (DbgProgMgr > 0) std::cerr << ">>> ProgramManager::createPIProgram(" << &Img << ")\n"; const pi_device_binary_struct &RawImg = Img.getRawData(); @@ -329,8 +329,11 @@ RT::PiProgram ProgramManager::createPIProgram(const RTDeviceBinaryImage &Img, ? createSpirvProgram(Ctx, RawImg.BinaryStart, ImgSize) : createBinaryProgram(Ctx, RawImg.BinaryStart, ImgSize); - // associate the PI program with the image it was created for - NativePrograms[Res] = &Img; + { + auto LockGuard = Ctx->getKernelProgramCache().acquireCachedPrograms(); + // associate the PI program with the image it was created for + NativePrograms[Res] = &Img; + } if (DbgProgMgr > 1) std::cerr << "created program: " << Res From ebe13725c9dff649ebc43684ba27778724825532 Mon Sep 17 00:00:00 2001 From: Dmitry Vodopyanov Date: Tue, 7 Jul 2020 14:43:29 +0300 Subject: [PATCH 2/2] Remove extra whitespaces Signed-off-by: Dmitry Vodopyanov --- sycl/source/detail/program_manager/program_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index 4760d048fc87a..348f67e02e5b0 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -288,7 +288,7 @@ static const char *getFormatStr(RT::PiDeviceBinaryType Format) { } RT::PiProgram ProgramManager::createPIProgram(const RTDeviceBinaryImage &Img, - const context &Context) { + const context &Context) { if (DbgProgMgr > 0) std::cerr << ">>> ProgramManager::createPIProgram(" << &Img << ")\n"; const pi_device_binary_struct &RawImg = Img.getRawData();