From 331b515478f32a06052023f57a4247bb0bceddd6 Mon Sep 17 00:00:00 2001 From: Compute-Runtime-Validation Date: Wed, 16 Apr 2025 14:22:49 +0200 Subject: [PATCH] Revert "fix: avoid joining thread in deferred deleter" This reverts commit 38a3667304178e49f211beeca3fb53b59c7c3b95. Signed-off-by: Compute-Runtime-Validation --- shared/source/memory_manager/deferred_deleter.cpp | 9 ++------- shared/source/memory_manager/deferred_deleter.h | 1 - shared/source/os_interface/linux/os_thread_linux.cpp | 4 ---- shared/source/os_interface/linux/os_thread_linux.h | 1 - shared/source/os_interface/os_thread.h | 1 - shared/source/os_interface/windows/os_thread_win.cpp | 5 ----- shared/source/os_interface/windows/os_thread_win.h | 1 - 7 files changed, 2 insertions(+), 20 deletions(-) diff --git a/shared/source/memory_manager/deferred_deleter.cpp b/shared/source/memory_manager/deferred_deleter.cpp index b16477d383..0383e0fd65 100644 --- a/shared/source/memory_manager/deferred_deleter.cpp +++ b/shared/source/memory_manager/deferred_deleter.cpp @@ -27,11 +27,8 @@ void DeferredDeleter::stop() { doWorkInBackground = false; lock.unlock(); condition.notify_one(); - worker->detach(); - // Wait for the working job to exit main loop - while (!exitedMainLoop) { - std::this_thread::yield(); - } + // Wait for the working job to exit + worker->join(); // Delete working thread worker.reset(); } @@ -79,7 +76,6 @@ void DeferredDeleter::ensureThread() { if (worker != nullptr) { return; } - exitedMainLoop = false; worker = Thread::createFunc(run, reinterpret_cast(this)); } @@ -107,7 +103,6 @@ void *DeferredDeleter::run(void *arg) { lock.lock(); // Check whether working thread should be stopped } while (!self->shouldStop()); - self->exitedMainLoop = true; lock.unlock(); return nullptr; } diff --git a/shared/source/memory_manager/deferred_deleter.h b/shared/source/memory_manager/deferred_deleter.h index 5b53d5a6d1..006f57df78 100644 --- a/shared/source/memory_manager/deferred_deleter.h +++ b/shared/source/memory_manager/deferred_deleter.h @@ -40,7 +40,6 @@ class DeferredDeleter : NEO::NonCopyableAndNonMovableClass { static void *run(void *); - std::atomic exitedMainLoop = false; std::atomic doWorkInBackground = false; std::atomic elementsToRelease = 0; std::atomic hostptrsToRelease = 0; diff --git a/shared/source/os_interface/linux/os_thread_linux.cpp b/shared/source/os_interface/linux/os_thread_linux.cpp index 871750aa9f..f5bf4c21e7 100644 --- a/shared/source/os_interface/linux/os_thread_linux.cpp +++ b/shared/source/os_interface/linux/os_thread_linux.cpp @@ -24,10 +24,6 @@ void ThreadLinux::join() { pthread_join(threadId, nullptr); } -void ThreadLinux::detach() { - pthread_detach(threadId); -} - void ThreadLinux::yield() { sched_yield(); } diff --git a/shared/source/os_interface/linux/os_thread_linux.h b/shared/source/os_interface/linux/os_thread_linux.h index 8c2551a533..b934ba4b8e 100644 --- a/shared/source/os_interface/linux/os_thread_linux.h +++ b/shared/source/os_interface/linux/os_thread_linux.h @@ -16,7 +16,6 @@ class ThreadLinux : public Thread { public: ThreadLinux(pthread_t threadId); void join() override; - void detach() override; void yield() override; ~ThreadLinux() override = default; diff --git a/shared/source/os_interface/os_thread.h b/shared/source/os_interface/os_thread.h index 9d1eee7d88..845a1e0aa8 100644 --- a/shared/source/os_interface/os_thread.h +++ b/shared/source/os_interface/os_thread.h @@ -15,7 +15,6 @@ class Thread { public: static decltype(&Thread::create) createFunc; virtual void join() = 0; - virtual void detach() = 0; virtual ~Thread() = default; virtual void yield() = 0; }; diff --git a/shared/source/os_interface/windows/os_thread_win.cpp b/shared/source/os_interface/windows/os_thread_win.cpp index a858fec9e5..cf39a745bb 100644 --- a/shared/source/os_interface/windows/os_thread_win.cpp +++ b/shared/source/os_interface/windows/os_thread_win.cpp @@ -21,12 +21,7 @@ void ThreadWin::join() { thread->join(); } -void ThreadWin::detach() { - thread->detach(); -} - void ThreadWin::yield() { std::this_thread::yield(); } - } // namespace NEO diff --git a/shared/source/os_interface/windows/os_thread_win.h b/shared/source/os_interface/windows/os_thread_win.h index 98ce9250ae..2a99670e02 100644 --- a/shared/source/os_interface/windows/os_thread_win.h +++ b/shared/source/os_interface/windows/os_thread_win.h @@ -16,7 +16,6 @@ class ThreadWin : public Thread { public: ThreadWin(std::thread *thread); void join() override; - void detach() override; void yield() override; ~ThreadWin() override = default;