From 95b478863b37dc2a993471cd9141d1a7267c5cb9 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Mon, 18 Mar 2024 23:17:20 +0900 Subject: [PATCH] Make sure to release thread local storage for unterminated threads. This resolves issue #131. Signed-off-by: Michele Calgaro --- src/kernel/qapplication.cpp | 2 +- src/kernel/qthread.cpp | 3 +++ src/kernel/qthread_unix.cpp | 2 +- src/tools/qthreadinstance_p.h | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/kernel/qapplication.cpp b/src/kernel/qapplication.cpp index e8658cda..c6206d78 100644 --- a/src/kernel/qapplication.cpp +++ b/src/kernel/qapplication.cpp @@ -571,7 +571,7 @@ public: // avoid warning from TQThread d->running = false; // do some cleanup, namely clean up the thread-local storage associated with the GUI thread - TQThreadInstance::finishGuiThread(d); + TQThreadInstance::releaseThreadStorage(d); } static TQCoreApplicationThread* self() { return tqt_gui_thread_self; } diff --git a/src/kernel/qthread.cpp b/src/kernel/qthread.cpp index bb51e41f..9158f5d9 100644 --- a/src/kernel/qthread.cpp +++ b/src/kernel/qthread.cpp @@ -168,6 +168,9 @@ TQThread::~TQThread() if ( d->running && !d->finished ) { #ifdef QT_CHECK_STATE tqWarning("TQThread object destroyed while thread is still running."); + + // clean up the thread-local storage, which otherwise would be leaked + TQThreadInstance::releaseThreadStorage(d); #endif d->orphan = TRUE; diff --git a/src/kernel/qthread_unix.cpp b/src/kernel/qthread_unix.cpp index 6a6f81b7..7aa548e3 100644 --- a/src/kernel/qthread_unix.cpp +++ b/src/kernel/qthread_unix.cpp @@ -180,7 +180,7 @@ void TQThreadInstance::finish( void * ) } } -void TQThreadInstance::finishGuiThread(TQThreadInstance *d) { +void TQThreadInstance::releaseThreadStorage(TQThreadInstance *d) { TQThreadStorageData::finish( d->thread_storage ); d->thread_storage = 0; } diff --git a/src/tools/qthreadinstance_p.h b/src/tools/qthreadinstance_p.h index 076c2ba1..f79ad2b9 100644 --- a/src/tools/qthreadinstance_p.h +++ b/src/tools/qthreadinstance_p.h @@ -100,7 +100,7 @@ public: static void finish( TQThreadInstance * ); #endif // Q_OS_WIN32 - static void finishGuiThread( TQThreadInstance *d ); + static void releaseThreadStorage( TQThreadInstance *d ); TQEventLoop* eventLoop; int cleanupType;