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;
}