From 2fd12c03cd5a54f80deaa9095ef863a45f3501f7 Mon Sep 17 00:00:00 2001 From: Ievgenii Meshcheriakov Date: Tue, 15 Aug 2023 11:38:34 +0200 Subject: [PATCH] QAbstractEventDispatcherPrivate: Create free timer ID list in constructor Create the global static free timer ID list in the constructor so that it is destroyed after any global static QDaemonThread instance that may be using it. Fixes: QTBUG-58732 Change-Id: Ic2d33ac3aa2ec3ca0261be9996920aae260e16fd Reviewed-by: Thiago Macieira Reviewed-by: Qt CI Bot (cherry picked from commit cff1c12eca6e1e7d2645f7079895718193beb621) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/kernel/qabstracteventdispatcher.cpp | 9 +++++++++ src/corelib/kernel/qabstracteventdispatcher_p.h | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp index 3001e3269be..98493946d8a 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.cpp +++ b/src/corelib/kernel/qabstracteventdispatcher.cpp @@ -52,6 +52,15 @@ Q_CONSTINIT const int QtTimerIdFreeListConstants::Sizes[QtTimerIdFreeListConstan typedef QFreeList QtTimerIdFreeList; Q_GLOBAL_STATIC(QtTimerIdFreeList, timerIdFreeList) +QAbstractEventDispatcherPrivate::QAbstractEventDispatcherPrivate() +{ + // Create the timer ID free list here to make sure that it is destroyed + // after any global static thread that may be using it. + // See also QTBUG-58732. + if (!timerIdFreeList.isDestroyed()) + (void)timerIdFreeList(); +} + QAbstractEventDispatcherPrivate::~QAbstractEventDispatcherPrivate() = default; diff --git a/src/corelib/kernel/qabstracteventdispatcher_p.h b/src/corelib/kernel/qabstracteventdispatcher_p.h index e7b1ac3b24f..7d57fd03604 100644 --- a/src/corelib/kernel/qabstracteventdispatcher_p.h +++ b/src/corelib/kernel/qabstracteventdispatcher_p.h @@ -26,8 +26,7 @@ class Q_CORE_EXPORT QAbstractEventDispatcherPrivate : public QObjectPrivate { Q_DECLARE_PUBLIC(QAbstractEventDispatcher) public: - inline QAbstractEventDispatcherPrivate() - { } + QAbstractEventDispatcherPrivate(); ~QAbstractEventDispatcherPrivate() override; QList eventFilters;