- Drop patches:
* 0001-Revert-QThread-Unix-move-the-pthread_key-to-a-file-s.patch * 0002-Revert-QThread-Unix-revert-to-pthread-destruction-in.patch - Add patches (kde#499537, QTBUG-133500, QTBUG-130278) * 0001-QLocale-try-to-survive-being-created-during-applicat.patch * 0001-QSystemLocale-bail-out-if-accessed-post-destruction.patch * 0001-QLibraryInfo-speed-up-checking-if-qt-etc-qt.conf-res.patch OBS-URL: https://build.opensuse.org/package/show/KDE:Qt6/qt6-base?expand=0&rev=130
This commit is contained in:
parent
54d49e2387
commit
f13d6f3b43
@ -0,0 +1,51 @@
|
||||
From a43c7e58046604796aa69974ea1c5d3e2648c755 Mon Sep 17 00:00:00 2001
|
||||
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||
Date: Fri, 24 Jan 2025 11:07:58 -0800
|
||||
Subject: [PATCH] QLibraryInfo: speed up checking if ":/qt/etc/qt.conf"
|
||||
resource exists
|
||||
|
||||
Go straight for QResource, because this is run very early in Qt's
|
||||
initialization, usually as a result of some debug message, via
|
||||
QLoggingRegistry::initializeRules(). This bypasses the need to create
|
||||
QResourceFileEnginePrivate, QResourceFileEngine, QFileInfoPrivate, and
|
||||
QFileInfo, all of which would end up in this .isValid() call.
|
||||
|
||||
Additionally, I'm making it query in the C locale, which will also avoid
|
||||
initializing the system & default QLocales. If a resource exists in any
|
||||
language, the C locale query will find it.
|
||||
|
||||
Task-number: QTBUG-133206
|
||||
Change-Id: I434b498903d793c12d35fffd3e297bfdbdc1b6fe
|
||||
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
|
||||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
||||
(cherry picked from commit d59e640c868f3db2d661970f3d34a22013d49053)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
(cherry picked from commit ae2502b4ad3d1215211bf4ed44037a40f52a313d)
|
||||
---
|
||||
src/corelib/global/qlibraryinfo.cpp | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
|
||||
index 94f3e60deba..5f6042be29d 100644
|
||||
--- a/src/corelib/global/qlibraryinfo.cpp
|
||||
+++ b/src/corelib/global/qlibraryinfo.cpp
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "qstringlist.h"
|
||||
#include "qfile.h"
|
||||
#if QT_CONFIG(settings)
|
||||
+#include "qresource.h"
|
||||
#include "qsettings.h"
|
||||
#endif
|
||||
#include "qlibraryinfo.h"
|
||||
@@ -103,7 +104,7 @@ static std::unique_ptr<QSettings> findConfiguration()
|
||||
return std::make_unique<QSettings>(*qtconfManualPath, QSettings::IniFormat);
|
||||
|
||||
QString qtconfig = QStringLiteral(":/qt/etc/qt.conf");
|
||||
- if (QFile::exists(qtconfig))
|
||||
+ if (QResource(qtconfig, QLocale::c()).isValid())
|
||||
return std::make_unique<QSettings>(qtconfig, QSettings::IniFormat);
|
||||
#ifdef Q_OS_DARWIN
|
||||
CFBundleRef bundleRef = CFBundleGetMainBundle();
|
||||
--
|
||||
2.48.1
|
||||
|
@ -0,0 +1,49 @@
|
||||
From 12d4bf1ab52748cb84894f50d437064b439e0b7d Mon Sep 17 00:00:00 2001
|
||||
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||
Date: Fri, 24 Jan 2025 10:43:38 -0800
|
||||
Subject: [PATCH] QLocale: try to survive being created during application shut
|
||||
down
|
||||
|
||||
QLocale is very often accessed during global static destructors, so
|
||||
let's try and survive if the default has already been destroyed. In that
|
||||
case, we shall fall back to the C locale.
|
||||
|
||||
I've placed the call to systemData(), which updates the system locale,
|
||||
before the initialization of defaultLocalePrivate, as the initialization
|
||||
of the latter depends on the former.
|
||||
|
||||
Task-number: QTBUG-133206
|
||||
Change-Id: I48e29b45f9be4514336cfffdf5affa5631a956a3
|
||||
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
|
||||
Reviewed-by: Albert Astals Cid <aacid@kde.org>
|
||||
(cherry picked from commit e0a1f491567f2495443babc5aa36a038260f96c6)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
(cherry picked from commit bcc0e6124a2ec80df535178d056324433f9ff984)
|
||||
---
|
||||
src/corelib/text/qlocale.cpp | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
|
||||
index 4f5b5452648..eff083b3d94 100644
|
||||
--- a/src/corelib/text/qlocale.cpp
|
||||
+++ b/src/corelib/text/qlocale.cpp
|
||||
@@ -1112,10 +1112,13 @@ QLocale::QLocale(QStringView name)
|
||||
*/
|
||||
|
||||
QLocale::QLocale()
|
||||
- : d(*defaultLocalePrivate)
|
||||
+ : d(c_private())
|
||||
{
|
||||
- // Make sure system data is up to date:
|
||||
- systemData();
|
||||
+ if (!defaultLocalePrivate.isDestroyed()) {
|
||||
+ // Make sure system data is up to date:
|
||||
+ systemData();
|
||||
+ d = *defaultLocalePrivate;
|
||||
+ }
|
||||
}
|
||||
|
||||
/*!
|
||||
--
|
||||
2.48.1
|
||||
|
@ -0,0 +1,49 @@
|
||||
From 2ef615228bba9a8eb282437bfb7472f925610e89 Mon Sep 17 00:00:00 2001
|
||||
From: Thiago Macieira <thiago.macieira@intel.com>
|
||||
Date: Fri, 24 Jan 2025 10:28:30 -0800
|
||||
Subject: [PATCH] QSystemLocale: bail out if accessed post-destruction
|
||||
|
||||
There's little we can do, but a lot of content ends up in QLocale very
|
||||
late in the execution. Let's at least not crash.
|
||||
|
||||
Task-number: QTBUG-133206
|
||||
Change-Id: I77d41141cb115147f9befffdd5e69dac19c96044
|
||||
Reviewed-by: Albert Astals Cid <aacid@kde.org>
|
||||
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
|
||||
(cherry picked from commit e32f28034ad2383393645777bcd96eab3f696076)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
(cherry picked from commit d5c5f9f3529b384d0d4bea2d51f0ad6a3d57481d)
|
||||
---
|
||||
src/corelib/text/qlocale_unix.cpp | 2 ++
|
||||
src/corelib/text/qlocale_win.cpp | 2 ++
|
||||
2 files changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/corelib/text/qlocale_unix.cpp b/src/corelib/text/qlocale_unix.cpp
|
||||
index a934f24c016..91dbb74c207 100644
|
||||
--- a/src/corelib/text/qlocale_unix.cpp
|
||||
+++ b/src/corelib/text/qlocale_unix.cpp
|
||||
@@ -127,6 +127,8 @@ QLocale QSystemLocale::fallbackLocale() const
|
||||
QVariant QSystemLocale::query(QueryType type, QVariant &&in) const
|
||||
{
|
||||
QSystemLocaleData *d = qSystemLocaleData();
|
||||
+ if (!d)
|
||||
+ return QVariant();
|
||||
|
||||
if (type == LocaleChanged) {
|
||||
d->readEnvironment();
|
||||
diff --git a/src/corelib/text/qlocale_win.cpp b/src/corelib/text/qlocale_win.cpp
|
||||
index 9fdb46a4c92..793751daaf0 100644
|
||||
--- a/src/corelib/text/qlocale_win.cpp
|
||||
+++ b/src/corelib/text/qlocale_win.cpp
|
||||
@@ -828,6 +828,8 @@ QLocale QSystemLocale::fallbackLocale() const
|
||||
QVariant QSystemLocale::query(QueryType type, QVariant &&in) const
|
||||
{
|
||||
QSystemLocalePrivate *d = systemLocalePrivate();
|
||||
+ if (!d)
|
||||
+ return QVariant();
|
||||
switch(type) {
|
||||
case DecimalPoint:
|
||||
return d->decimalPoint();
|
||||
--
|
||||
2.48.1
|
||||
|
@ -1,75 +0,0 @@
|
||||
From a64e451d703b7a1e2ab10e46e6d7e7dca17795e5 Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||||
Date: Wed, 5 Feb 2025 10:47:38 +0100
|
||||
Subject: [PATCH 1/2] Revert "QThread/Unix: move the pthread_key to a
|
||||
file-scope static"
|
||||
|
||||
This reverts commit 38f287443c82510719079a254910424b5e510b25.
|
||||
---
|
||||
src/corelib/thread/qthread_unix.cpp | 39 ++++++++---------------------
|
||||
1 file changed, 11 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
|
||||
index 0db9bb53031..182240e731e 100644
|
||||
--- a/src/corelib/thread/qthread_unix.cpp
|
||||
+++ b/src/corelib/thread/qthread_unix.cpp
|
||||
@@ -116,12 +116,6 @@ static void destroy_current_thread_data(void *p)
|
||||
QThreadData *data = static_cast<QThreadData *>(p);
|
||||
QThread *thread = data->thread.loadAcquire();
|
||||
|
||||
-#ifdef Q_OS_APPLE
|
||||
- // apparent runtime bug: the trivial has been cleared and we end up
|
||||
- // recreating the QThreadData
|
||||
- currentThreadData = data;
|
||||
-#endif
|
||||
-
|
||||
if (data->isAdopted) {
|
||||
// If this is an adopted thread, then QThreadData owns the QThread and
|
||||
// this is very likely the last reference. These pointers cannot be
|
||||
@@ -155,32 +149,21 @@ static QThreadData *get_thread_data()
|
||||
return currentThreadData;
|
||||
}
|
||||
|
||||
-namespace {
|
||||
-struct PThreadTlsKey
|
||||
-{
|
||||
- pthread_key_t key;
|
||||
- PThreadTlsKey() noexcept { pthread_key_create(&key, destroy_current_thread_data); }
|
||||
- ~PThreadTlsKey() { pthread_key_delete(key); }
|
||||
-};
|
||||
-}
|
||||
-#if QT_SUPPORTS_INIT_PRIORITY
|
||||
-Q_DECL_INIT_PRIORITY(10)
|
||||
-#endif
|
||||
-static PThreadTlsKey pthreadTlsKey; // intentional non-trivial init & destruction
|
||||
-
|
||||
-static void set_thread_data(QThreadData *data) noexcept
|
||||
+static void set_thread_data(QThreadData *data)
|
||||
{
|
||||
if (data) {
|
||||
- // As noted above: one global static for the thread that called
|
||||
- // ::exit() (which may not be a Qt thread) and the pthread_key_t for
|
||||
- // all others.
|
||||
- static struct Cleanup {
|
||||
- ~Cleanup() {
|
||||
- if (QThreadData *data = get_thread_data())
|
||||
+ static pthread_key_t tls_key;
|
||||
+ struct TlsKey {
|
||||
+ TlsKey() noexcept { pthread_key_create(&tls_key, destroy_current_thread_data); }
|
||||
+ ~TlsKey()
|
||||
+ {
|
||||
+ if (QThreadData *data = currentThreadData)
|
||||
destroy_current_thread_data(data);
|
||||
+ pthread_key_delete(tls_key);
|
||||
}
|
||||
- } currentThreadCleanup;
|
||||
- pthread_setspecific(pthreadTlsKey.key, data);
|
||||
+ };
|
||||
+ static TlsKey currentThreadCleanup;
|
||||
+ pthread_setspecific(tls_key, data);
|
||||
}
|
||||
currentThreadData = data;
|
||||
}
|
||||
--
|
||||
2.48.1
|
||||
|
@ -1,277 +0,0 @@
|
||||
From a4fd6f6114dd837f0af7398f5b1ccc388771dcb8 Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Vogt <fabian@ritter-vogt.de>
|
||||
Date: Wed, 5 Feb 2025 10:47:40 +0100
|
||||
Subject: [PATCH 2/2] Revert "QThread/Unix: revert to pthread destruction
|
||||
instead of thread_local"
|
||||
|
||||
This reverts commit 5acbda4b06ea5f494b56353ff9df60e1a016b55a.
|
||||
---
|
||||
src/corelib/thread/qthread_unix.cpp | 55 +++++++------
|
||||
src/corelib/thread/qthread_win.cpp | 1 -
|
||||
.../kernel/qcoreapplication/CMakeLists.txt | 7 --
|
||||
.../qcoreapplication/tst_qcoreapplication.cpp | 20 +++++
|
||||
.../tst_static_qcoreapplication.cpp | 81 -------------------
|
||||
.../gui/kernel/qguiapplication/CMakeLists.txt | 8 --
|
||||
.../kernel/qapplication/CMakeLists.txt | 8 --
|
||||
7 files changed, 50 insertions(+), 130 deletions(-)
|
||||
delete mode 100644 tests/auto/corelib/kernel/qcoreapplication/tst_static_qcoreapplication.cpp
|
||||
|
||||
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
|
||||
index 182240e731e..e81cd4ef880 100644
|
||||
--- a/src/corelib/thread/qthread_unix.cpp
|
||||
+++ b/src/corelib/thread/qthread_unix.cpp
|
||||
@@ -91,22 +91,14 @@ enum { ThreadPriorityResetFlag = 0x80000000 };
|
||||
// Moreover, this can be racy and having our own thread_local early in
|
||||
// QThreadPrivate::start() made it even more so. See QTBUG-129846 for analysis.
|
||||
//
|
||||
-// There's a good correlation between this C++11 feature and our ability to
|
||||
-// call QThreadPrivate::cleanup() from destroy_thread_data().
|
||||
+// For the platforms where this C++11 feature is not properly implemented yet,
|
||||
+// we fall back to a pthread_setspecific() call and do not perform late
|
||||
+// clean-up, because then the order of registration of those pthread_specific_t
|
||||
+// keys matters and Glib uses them too.
|
||||
//
|
||||
// https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3/libsupc%2B%2B/atexit_thread.cc;hb=releases/gcc-14.2.0#l133
|
||||
// https://github.com/llvm/llvm-project/blob/llvmorg-19.1.0/libcxxabi/src/cxa_thread_atexit.cpp#L118-L120
|
||||
-#endif
|
||||
-//
|
||||
-// However, we can't destroy the QThreadData for the thread that called
|
||||
-// ::exit() that early, because a lot of existing content (including in Qt)
|
||||
-// runs when the static destructors are run and they do depend on QThreadData
|
||||
-// being extant. Likewise, we can't destroy it at global static destructor time
|
||||
-// because it's too late: the event dispatcher is usually a class found in a
|
||||
-// plugin and the plugin's destructors (as well as QtGui's) will have run. So
|
||||
-// we strike a middle-ground and destroy at function-local static destructor
|
||||
-// time (see set_thread_data()), because those run after the thread_local ones,
|
||||
-// before the global ones, and in reverse order of creation.
|
||||
+#endif // QT_CONFIG(broken_threadlocal_dtors)
|
||||
|
||||
// Always access this through the {get,set,clear}_thread_data() functions.
|
||||
Q_CONSTINIT static thread_local QThreadData *currentThreadData = nullptr;
|
||||
@@ -149,21 +141,34 @@ static QThreadData *get_thread_data()
|
||||
return currentThreadData;
|
||||
}
|
||||
|
||||
+#if QT_CONFIG(broken_threadlocal_dtors)
|
||||
+// The destructors registered with pthread_key_create() below are NOT run from
|
||||
+// exit(), so we must also use atexit().
|
||||
+static void destroy_main_thread_data()
|
||||
+{
|
||||
+ if (QThreadData *d = get_thread_data())
|
||||
+ destroy_current_thread_data(d);
|
||||
+}
|
||||
+Q_DESTRUCTOR_FUNCTION(destroy_main_thread_data)
|
||||
+#endif
|
||||
+
|
||||
static void set_thread_data(QThreadData *data)
|
||||
{
|
||||
if (data) {
|
||||
- static pthread_key_t tls_key;
|
||||
- struct TlsKey {
|
||||
- TlsKey() noexcept { pthread_key_create(&tls_key, destroy_current_thread_data); }
|
||||
- ~TlsKey()
|
||||
- {
|
||||
- if (QThreadData *data = currentThreadData)
|
||||
- destroy_current_thread_data(data);
|
||||
- pthread_key_delete(tls_key);
|
||||
- }
|
||||
- };
|
||||
- static TlsKey currentThreadCleanup;
|
||||
- pthread_setspecific(tls_key, data);
|
||||
+ if constexpr (QT_CONFIG(broken_threadlocal_dtors)) {
|
||||
+ static pthread_key_t tls_key;
|
||||
+ struct TlsKey {
|
||||
+ TlsKey() { pthread_key_create(&tls_key, destroy_current_thread_data); }
|
||||
+ ~TlsKey() { pthread_key_delete(tls_key); }
|
||||
+ };
|
||||
+ static TlsKey currentThreadCleanup;
|
||||
+ pthread_setspecific(tls_key, data);
|
||||
+ } else {
|
||||
+ struct Cleanup {
|
||||
+ ~Cleanup() { destroy_current_thread_data(currentThreadData); }
|
||||
+ };
|
||||
+ static thread_local Cleanup currentThreadCleanup;
|
||||
+ }
|
||||
}
|
||||
currentThreadData = data;
|
||||
}
|
||||
diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp
|
||||
index 88ba6dc8f62..bc5de38b0ba 100644
|
||||
--- a/src/corelib/thread/qthread_win.cpp
|
||||
+++ b/src/corelib/thread/qthread_win.cpp
|
||||
@@ -11,7 +11,6 @@
|
||||
|
||||
#include <private/qcoreapplication_p.h>
|
||||
#include <private/qeventdispatcher_win_p.h>
|
||||
-#include "qloggingcategory.h"
|
||||
|
||||
#include <qt_windows.h>
|
||||
|
||||
diff --git a/tests/auto/corelib/kernel/qcoreapplication/CMakeLists.txt b/tests/auto/corelib/kernel/qcoreapplication/CMakeLists.txt
|
||||
index afe6c22b40f..8f9783088c0 100644
|
||||
--- a/tests/auto/corelib/kernel/qcoreapplication/CMakeLists.txt
|
||||
+++ b/tests/auto/corelib/kernel/qcoreapplication/CMakeLists.txt
|
||||
@@ -37,10 +37,3 @@ endif()
|
||||
if (ANDROID)
|
||||
set_property(TARGET tst_qcoreapplication PROPERTY QT_ANDROID_VERSION_NAME ${target_version})
|
||||
endif()
|
||||
-
|
||||
-qt_internal_add_test(tst_static_qcoreapplication
|
||||
- SOURCES
|
||||
- tst_static_qcoreapplication.cpp
|
||||
- LIBRARIES
|
||||
- Qt::CorePrivate
|
||||
-)
|
||||
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
|
||||
index d7dfca824bb..a031e6a54d0 100644
|
||||
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
|
||||
+++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
|
||||
@@ -1065,6 +1065,26 @@ static void createQObjectOnDestruction()
|
||||
// QThread) after the last QObject has been destroyed (especially after
|
||||
// QCoreApplication has).
|
||||
|
||||
+#if defined(QT_QGUIAPPLICATIONTEST)
|
||||
+ // If we've linked to QtGui, we make no representations about there being
|
||||
+ // global static (not Q_GLOBAL_STATIC) variables that are QObject.
|
||||
+#elif QT_CONFIG(broken_threadlocal_dtors)
|
||||
+ // With broken thread-local destructors, we cannot guarantee the ordering
|
||||
+ // between thread_local destructors and static-lifetime destructors (hence
|
||||
+ // why they're broken).
|
||||
+ //
|
||||
+ // On Unix systems, we use a Q_DESTRUCTOR_FUNCTION in qthread_unix.cpp to
|
||||
+ // work around the issue, but that means it cannot have run yet.
|
||||
+ //
|
||||
+ // This variable is set on Windows too, even though the nature of the
|
||||
+ // problem is different.
|
||||
+#else
|
||||
+ // The thread_local destructor in qthread_unix.cpp has run so the
|
||||
+ // QAdoptedThread must have been cleaned up.
|
||||
+ if (theMainThreadIsSet())
|
||||
+ qFatal("theMainThreadIsSet() returned true; some QObject must have leaked");
|
||||
+#endif
|
||||
+
|
||||
// Before the fixes, this would cause a dangling pointer dereference. If
|
||||
// the problem comes back, it's possible that the following causes no
|
||||
// effect.
|
||||
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_static_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_static_qcoreapplication.cpp
|
||||
deleted file mode 100644
|
||||
index 4f10aaed6e9..00000000000
|
||||
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_static_qcoreapplication.cpp
|
||||
+++ /dev/null
|
||||
@@ -1,81 +0,0 @@
|
||||
-// Copyright (C) 2024 Intel Corporation.
|
||||
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
||||
-
|
||||
-#include <QtTest/QTest>
|
||||
-#include <private/qcoreapplication_p.h>
|
||||
-#include <private/qhooks_p.h>
|
||||
-
|
||||
-#ifdef QT_WIDGETS_LIB
|
||||
-# define tst_Static_QCoreApplication tst_Static_QApplication
|
||||
-using App = QApplication;
|
||||
-#elif defined(QT_GUI_LIB)
|
||||
-# define tst_Static_QCoreApplication tst_Static_QGuiApplication
|
||||
-using App = QGuiApplication;
|
||||
-#else
|
||||
-using App = QCoreApplication;
|
||||
-#endif
|
||||
-
|
||||
-class tst_Static_QCoreApplication : public QObject
|
||||
-{
|
||||
- Q_OBJECT
|
||||
-public:
|
||||
- ~tst_Static_QCoreApplication() {}
|
||||
-private Q_SLOTS:
|
||||
- void staticApplication();
|
||||
-};
|
||||
-
|
||||
-void tst_Static_QCoreApplication::staticApplication()
|
||||
-{
|
||||
- // This test only verifies that the destructor, when run inside of exit(),
|
||||
- // will not crash.
|
||||
- static int argc = 1;
|
||||
- const char *argv[] = { staticMetaObject.className(), nullptr };
|
||||
- static App app(argc, const_cast<char **>(argv));
|
||||
-}
|
||||
-
|
||||
-struct HookManager
|
||||
-{
|
||||
- static inline QBasicAtomicInt objectCount = {};
|
||||
- static void addObject(QObject *o)
|
||||
- {
|
||||
- // printf("+ %p = %s\n", o, o->metaObject()->className());
|
||||
- objectCount.ref();
|
||||
- Q_UNUSED(o);
|
||||
- }
|
||||
- static void removeObject(QObject *o)
|
||||
- {
|
||||
- objectCount.deref();
|
||||
- // printf("- %p\n", o);
|
||||
- Q_UNUSED(o);
|
||||
- }
|
||||
-
|
||||
- HookManager()
|
||||
- {
|
||||
- qtHookData[QHooks::AddQObject] = reinterpret_cast<quintptr>(&addObject);
|
||||
- qtHookData[QHooks::RemoveQObject] = reinterpret_cast<quintptr>(&removeObject);
|
||||
- }
|
||||
-
|
||||
- ~HookManager()
|
||||
- {
|
||||
- qtHookData[QHooks::AddQObject] = 0;
|
||||
- qtHookData[QHooks::RemoveQObject] = 0;
|
||||
-
|
||||
- auto app = qApp;
|
||||
- if (app)
|
||||
- qFatal("qApp was not destroyed = %p", app);
|
||||
-#if !defined(QT_GUI_LIB) && !defined(Q_OS_WIN)
|
||||
- // Only tested for QtCore/QCoreApplication on Unix. QtGui has statics
|
||||
- // with QObject that haven't been cleaned up.
|
||||
- if (int c = objectCount.loadRelaxed())
|
||||
- qFatal("%d objects still alive", c);
|
||||
-
|
||||
- if (void *id = QCoreApplicationPrivate::theMainThreadId.loadRelaxed())
|
||||
- qFatal("QCoreApplicationPrivate::theMainThreadId is still set - %p", id);
|
||||
-#endif
|
||||
- }
|
||||
-};
|
||||
-static HookManager hookManager;
|
||||
-
|
||||
-QTEST_APPLESS_MAIN(tst_Static_QCoreApplication)
|
||||
-#include "tst_static_qcoreapplication.moc"
|
||||
-
|
||||
diff --git a/tests/auto/gui/kernel/qguiapplication/CMakeLists.txt b/tests/auto/gui/kernel/qguiapplication/CMakeLists.txt
|
||||
index 109c0813128..6f1f845edd3 100644
|
||||
--- a/tests/auto/gui/kernel/qguiapplication/CMakeLists.txt
|
||||
+++ b/tests/auto/gui/kernel/qguiapplication/CMakeLists.txt
|
||||
@@ -46,11 +46,3 @@ if (APPLE)
|
||||
set_property(TARGET tst_qguiapplication PROPERTY MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist")
|
||||
set_property(TARGET tst_qguiapplication PROPERTY PROPERTY MACOSX_BUNDLE TRUE)
|
||||
endif()
|
||||
-
|
||||
-qt_internal_add_test(tst_static_qguiapplication
|
||||
- SOURCES
|
||||
- ../../../corelib/kernel/qcoreapplication/tst_static_qcoreapplication.cpp
|
||||
- LIBRARIES
|
||||
- Qt::CorePrivate
|
||||
- Qt::Gui
|
||||
-)
|
||||
diff --git a/tests/auto/widgets/kernel/qapplication/CMakeLists.txt b/tests/auto/widgets/kernel/qapplication/CMakeLists.txt
|
||||
index 7825ed51c4e..524db06560f 100644
|
||||
--- a/tests/auto/widgets/kernel/qapplication/CMakeLists.txt
|
||||
+++ b/tests/auto/widgets/kernel/qapplication/CMakeLists.txt
|
||||
@@ -15,11 +15,3 @@ add_dependencies(tst_qapplication
|
||||
desktopsettingsaware_helper
|
||||
modal_helper
|
||||
)
|
||||
-
|
||||
-qt_internal_add_test(tst_static_qapplication
|
||||
- SOURCES
|
||||
- ../../../corelib/kernel/qcoreapplication/tst_static_qcoreapplication.cpp
|
||||
- LIBRARIES
|
||||
- Qt::CorePrivate
|
||||
- Qt::Widgets
|
||||
-)
|
||||
--
|
||||
2.48.1
|
||||
|
@ -1,3 +1,14 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Feb 6 13:44:48 UTC 2025 - Christophe Marin <christophe@krop.fr>
|
||||
|
||||
- Drop patches:
|
||||
* 0001-Revert-QThread-Unix-move-the-pthread_key-to-a-file-s.patch
|
||||
* 0002-Revert-QThread-Unix-revert-to-pthread-destruction-in.patch
|
||||
- Add patches (kde#499537, QTBUG-133500, QTBUG-130278)
|
||||
* 0001-QLocale-try-to-survive-being-created-during-applicat.patch
|
||||
* 0001-QSystemLocale-bail-out-if-accessed-post-destruction.patch
|
||||
* 0001-QLibraryInfo-speed-up-checking-if-qt-etc-qt.conf-res.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Feb 5 09:54:18 UTC 2025 - Fabian Vogt <fabian@ritter-vogt.de>
|
||||
|
||||
|
@ -42,6 +42,10 @@ URL: https://www.qt.io
|
||||
Source0: https://download.qt.io/official_releases/qt/%{short_version}/%{real_version}%{tar_suffix}/submodules/%{tar_name}-%{real_version}%{tar_suffix}.tar.xz
|
||||
Source99: qt6-base-rpmlintrc
|
||||
# Patches 0-100 are upstream patches #
|
||||
# https://bugs.kde.org/show_bug.cgi?id=499537
|
||||
Patch0: 0001-QLocale-try-to-survive-being-created-during-applicat.patch
|
||||
Patch1: 0001-QSystemLocale-bail-out-if-accessed-post-destruction.patch
|
||||
Patch2: 0001-QLibraryInfo-speed-up-checking-if-qt-etc-qt.conf-res.patch
|
||||
# Patches 100-200 are openSUSE and/or non-upstream(able) patches #
|
||||
# No need to pollute the library dir with object files, install them in the qt6 subfolder
|
||||
Patch100: 0001-CMake-Install-objects-files-into-ARCHDATADIR.patch
|
||||
@ -49,9 +53,6 @@ Patch100: 0001-CMake-Install-objects-files-into-ARCHDATADIR.patch
|
||||
Patch101: 0001-Use-newer-GCC-on-Leap.patch
|
||||
%endif
|
||||
Patch102: 0001-Don-t-strip-binaries-when-building-with-qmake.patch
|
||||
# https://bugs.kde.org/show_bug.cgi?id=499537
|
||||
Patch103: 0001-Revert-QThread-Unix-move-the-pthread_key-to-a-file-s.patch
|
||||
Patch104: 0002-Revert-QThread-Unix-revert-to-pthread-destruction-in.patch
|
||||
##
|
||||
BuildRequires: cmake >= 3.18.3
|
||||
BuildRequires: cups-devel
|
||||
|
Loading…
x
Reference in New Issue
Block a user