SWDEV-510319 - Fixed random segfaults in graph tests
This change fixes random segfaults in graph tests that are seen after the change make internal callbacks non-blocking. The callback thread that decreases the GraphExec ref count may now run after the runtime shutdown. This can cause a segfault because the hip::device that is accessed in GraphExec destructor is already destroyed during runtime shutdown. This patch ensures that the hip::device object stays alive until after the callback thread completes. Change-Id: I75a6ac01f27a0b2250bbd10ed389ebfb322927af
This commit is contained in:
@@ -363,6 +363,7 @@ hipError_t GraphExec::Init() {
|
||||
status = CaptureAQLPackets();
|
||||
}
|
||||
instantiateDeviceId_ = hip::getCurrentDevice()->deviceId();
|
||||
static_cast<ReferenceCountedObject*>( hip::getCurrentDevice())->retain();
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
@@ -505,7 +505,6 @@ struct Graph {
|
||||
amd::ScopedLock lock(graphSetLock_);
|
||||
graphSet_.insert(this);
|
||||
mem_pool_ = device->GetGraphMemoryPool();
|
||||
mem_pool_->retain();
|
||||
graphInstantiated_ = false;
|
||||
roots_.resize(DEBUG_HIP_FORCE_GRAPH_QUEUES);
|
||||
leafs_.resize(DEBUG_HIP_FORCE_GRAPH_QUEUES);
|
||||
@@ -543,9 +542,6 @@ struct Graph {
|
||||
}
|
||||
}
|
||||
graphUserObj_.clear();
|
||||
if (mem_pool_ != nullptr) {
|
||||
mem_pool_->release();
|
||||
}
|
||||
memAllocNodePtrs_.clear();
|
||||
}
|
||||
|
||||
@@ -764,6 +760,9 @@ struct GraphExec : public amd::ReferenceCountedObject, public Graph {
|
||||
kernArgManager_->release();
|
||||
}
|
||||
}
|
||||
if (instantiateDeviceId_ != -1) {
|
||||
static_cast<ReferenceCountedObject*>(g_devices[instantiateDeviceId_])->release();
|
||||
}
|
||||
}
|
||||
|
||||
Node GetClonedNode(Node node) {
|
||||
|
||||
Reference in New Issue
Block a user