[PATCH] QLocale: try to survive being created during application shut down
authorThiago Macieira <thiago.macieira@intel.com>
Fri, 24 Jan 2025 18:43:38 +0000 (10:43 -0800)
committerPatrick Franz <deltaone@debian.org>
Thu, 19 Jun 2025 22:08:21 +0000 (00:08 +0200)
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)

Gbp-Pq: Name upstream_qlocale_shutdown.patch

src/corelib/text/qlocale.cpp

index 4f5b5452648e8c33a2cfe3488fd309ae299b0cf5..eff083b3d941035b9a47c16ccd7b0e551851bbff 100644 (file)
@@ -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;
+    }
 }
 
 /*!