From b83152ea03718c6ecd8b9ef2d9fe6788c5478f1b Mon Sep 17 00:00:00 2001 From: foreman Date: Mon, 26 Aug 2019 14:32:48 -0400 Subject: [PATCH] P4 to Git Change 1989089 by kjayapra@0_HIPWS_P2P_ROCM on 2019/08/26 14:24:21 SWDEV-198194 - Delete vars at __hipUnregisterFatBinary. Affected files ... ... //depot/stg/opencl/drivers/opencl/api/hip/hip_internal.hpp#39 edit ... //depot/stg/opencl/drivers/opencl/api/hip/hip_module.cpp#38 edit ... //depot/stg/opencl/drivers/opencl/api/hip/hip_platform.cpp#40 edit [ROCm/clr commit: 441eefa78b3605ae8a1228402410b7b72c324a80] --- projects/clr/hipamd/api/hip/hip_internal.hpp | 2 +- projects/clr/hipamd/api/hip/hip_module.cpp | 6 +++++- projects/clr/hipamd/api/hip/hip_platform.cpp | 7 +++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/projects/clr/hipamd/api/hip/hip_internal.hpp b/projects/clr/hipamd/api/hip/hip_internal.hpp index 0df562065c..49b3757dda 100644 --- a/projects/clr/hipamd/api/hip/hip_internal.hpp +++ b/projects/clr/hipamd/api/hip/hip_internal.hpp @@ -154,7 +154,7 @@ public: return *platform_; } - void unregisterVar(hipModule_t hmod); + std::vector< std::pair >* unregisterVar(hipModule_t hmod); void registerVar(const void* hostvar, const DeviceVar& var); void registerFunction(const void* hostFunction, const DeviceFunction& func); diff --git a/projects/clr/hipamd/api/hip/hip_module.cpp b/projects/clr/hipamd/api/hip/hip_module.cpp index 87106a73e6..1f4a2defe9 100644 --- a/projects/clr/hipamd/api/hip/hip_module.cpp +++ b/projects/clr/hipamd/api/hip/hip_module.cpp @@ -71,7 +71,11 @@ hipError_t hipModuleLoad(hipModule_t* module, const char* fname) } bool ihipModuleUnregisterGlobal(hipModule_t hmod) { - PlatformState::instance().unregisterVar(hmod); + std::vector< std::pair >* modules = + PlatformState::instance().unregisterVar(hmod); + if (modules != nullptr) { + delete modules; + } return true; } diff --git a/projects/clr/hipamd/api/hip/hip_platform.cpp b/projects/clr/hipamd/api/hip/hip_platform.cpp index dbc1b7fba8..ee05e7c52a 100644 --- a/projects/clr/hipamd/api/hip/hip_platform.cpp +++ b/projects/clr/hipamd/api/hip/hip_platform.cpp @@ -165,18 +165,20 @@ extern "C" std::vector< std::pair >* __hipRegisterFatBinary(c return programs; } -void PlatformState::unregisterVar(hipModule_t hmod) { +std::vector< std::pair >* PlatformState::unregisterVar(hipModule_t hmod) { amd::ScopedLock lock(lock_); + std::vector< std::pair >* rmodules = nullptr; auto it = vars_.begin(); while (it != vars_.end()) { DeviceVar& dvar = it->second; if ((*dvar.modules)[0].first == hmod) { - delete dvar.modules; + rmodules = dvar.modules; vars_.erase(it++); } else { ++it; } } + return rmodules; } void PlatformState::registerVar(const void* hostvar, @@ -392,6 +394,7 @@ extern "C" void __hipUnregisterFatBinary(std::vector< std::pair(module.first))->release(); } }); + PlatformState::instance().unregisterVar((*modules)[0].first); delete modules; }