diff --git a/projects/clr/rocclr/platform/commandqueue.cpp b/projects/clr/rocclr/platform/commandqueue.cpp index 90573b4cc5..8b27b4ce30 100644 --- a/projects/clr/rocclr/platform/commandqueue.cpp +++ b/projects/clr/rocclr/platform/commandqueue.cpp @@ -66,6 +66,7 @@ bool HostQueue::terminate() { marker->awaitCompletion(); marker->release(); } + thread_.Release(); thread_.acceptingCommands_ = false; } else { if (Os::isThreadAlive(thread_)) { diff --git a/projects/clr/rocclr/platform/commandqueue.hpp b/projects/clr/rocclr/platform/commandqueue.hpp index ea702a5eec..f98332bf33 100644 --- a/projects/clr/rocclr/platform/commandqueue.hpp +++ b/projects/clr/rocclr/platform/commandqueue.hpp @@ -164,19 +164,13 @@ class HostQueue : public CommandQueue { acceptingCommands_(false), virtualDevice_(nullptr) {} - virtual ~Thread() { - if (virtualDevice_ != nullptr) { - delete virtualDevice_; - virtualDevice_ = nullptr; - } - } - //! The command queue thread entry point. void run(void* data) { HostQueue* queue = static_cast(data); virtualDevice_ = queue->device().createVirtualDevice(queue); if (virtualDevice_ != nullptr) { queue->loop(virtualDevice_); + Release(); } else { acceptingCommands_ = false; queue->flush(); @@ -190,6 +184,8 @@ class HostQueue : public CommandQueue { } } + void Release() const { delete virtualDevice_; } + //! Get virtual device for the current thread device::VirtualDevice* vdev() const { return virtualDevice_; }