SWDEV-472309 - Ensure static maps are destroyed after __hipUnregisterFatBinary
hipDeviceSynchronize called from __hipUnregisterFatBinary accesses static maps and monitors. This change ensures these ojects are not destroyed before __hipUnregisterFatBinary is called. Additionally it disables the teardown process for static build. Change-Id: I46b58641d60efcf6637a8e99cdd786ffe9e2c77d
Этот коммит содержится в:
@@ -28,7 +28,7 @@
|
||||
namespace hip {
|
||||
std::once_flag g_ihipInitialized;
|
||||
|
||||
std::vector<hip::Device*> g_devices;
|
||||
std::vector<hip::Device*> g_devices ROCCLR_INIT_PRIORITY(101);
|
||||
thread_local TlsAggregator tls;
|
||||
amd::Context* host_context = nullptr;
|
||||
|
||||
|
||||
@@ -51,8 +51,10 @@ const char* GetGraphNodeTypeString(uint32_t op) {
|
||||
}
|
||||
|
||||
namespace hip {
|
||||
std::unordered_map<GraphExec*, std::pair<hip::Stream*, bool>> GraphExecStatus_;
|
||||
amd::Monitor GraphExecStatusLock_{"Guards graph execution state"};
|
||||
std::unordered_map<GraphExec *, std::pair<hip::Stream *, bool>>
|
||||
GraphExecStatus_ ROCCLR_INIT_PRIORITY(101);
|
||||
amd::Monitor GraphExecStatusLock_ ROCCLR_INIT_PRIORITY(101){
|
||||
"Guards graph execution state"};
|
||||
|
||||
int GraphNode::nextID = 0;
|
||||
int Graph::nextID = 0;
|
||||
|
||||
@@ -318,7 +318,7 @@ Command::Command(HostQueue& queue, cl_command_type type, const EventWaitList& ev
|
||||
}
|
||||
}
|
||||
|
||||
SysmemPool<ComputeCommand> Command::command_pool_;
|
||||
SysmemPool<ComputeCommand> Command::command_pool_ ROCCLR_INIT_PRIORITY(101);
|
||||
|
||||
// ================================================================================================
|
||||
void Command::operator delete(void* ptr) {
|
||||
|
||||
@@ -109,7 +109,7 @@ amd::Monitor listenerLock("Hostcall listener lock");
|
||||
std::vector<ReferenceCountedObject*> RuntimeTearDown::external_;
|
||||
|
||||
RuntimeTearDown::~RuntimeTearDown() {
|
||||
#ifndef _WIN32
|
||||
#if !defined(_WIN32) && !defined(BUILD_STATIC_LIBS)
|
||||
// Only perform destruction if process matches the initialization,
|
||||
// to avoid a call with the child process after fork()
|
||||
if (amd::IS_HIP && amd::Os::getProcessId() == Runtime::pid()) {
|
||||
|
||||
Ссылка в новой задаче
Block a user