-
Bug
-
Resolution: Out of scope
-
P1: Critical
-
None
-
6.9.0 Beta2
-
None
-
e0a1f4915 (dev), bcc0e6124 (6.9), 12d4bf1ab (6.8), e32f28034 (dev), d5c5f9f35 (6.9), 2ef615228 (6.8), d59e640c8 (dev), ae2502b4a (6.9), a43c7e580 (6.8), ba18ae386 (dev), c6fdf954e (6.9), 802beaa3f (6.8)
Consider the following code:
#include <QCoreApplication> #include <QLocale> #include <QThreadStorage> #include <QTimer> #include <QtGlobal> using ParseCache = QThreadStorage<int>; Q_GLOBAL_STATIC(ParseCache, sGlobalParse) class Tester { public: ~Tester() { QLocale().name(); sGlobalParse->localData(); } }; Q_GLOBAL_STATIC(Tester, globalTestObject) int main(int argc, char **argv) { QCoreApplication app(argc, argv); Tester *t = globalTestObject(); QTimer::singleShot(0, qApp, SLOT(quit())); return app.exec(); }
With Qt 6.9 Beta 2 it crashes on exit
ASSERT failure in QGlobalStatic<Holder>::Type& QGlobalStatic<Holder>::operator*() [with Holder = QtGlobalStatic::Holder<\{anonymous}::Q_QGS_defaultLocalePrivate>; Type = QSharedDataPointer<QLocalePrivate>]: "The global static was used after being destroyed", file /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h, line 92
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1 0x00007ffff5a9a1c3 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:78
#2 0x00007ffff5a41436 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3 0x00007ffff5a2891a in __GI_abort () at abort.c:79
#4 0x00007ffff63ab96c in qAbort () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qassert.cpp:46
#5 0x00007ffff6403666 in qt_message_fatal<QString&> (context=..., message=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlogging.cpp:2149
#6 0x00007ffff6404e91 in qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *) (msgType=msgType@entry=QtFatalMsg, context=..., msg=msg@entry=0x7ffff6efc460 "ASSERT failure in %s: \"%s\", file %s, line %d",
ap=ap@entry=0x7ffff3004c20) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlogging.cpp:381
#7 0x00007ffff641343f in QMessageLogger::fatal (this=this@entry=0x7ffff2e21da0, msg=msg@entry=0x7ffff6efc460 "ASSERT failure in %s: \"%s\", file %s, line %d") at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlogging.cpp:883
#8 0x00007ffff63abc4b in qt_assert_x (where=where@entry=0x7ffff6f73140 "QGlobalStatic<Holder>::Type& QGlobalStatic<Holder>::operator*() [with Holder = QtGlobalStatic::Holder<{anonymous}::Q_QGS_defaultLocalePrivate>; Type = QSharedDataPointer<QLocalePrivate>]",
what=what@entry=0x7ffff6f73000 "The global static was used after being destroyed", file=file@entry=0x7ffff6f72f80 "/home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h", line=line@entry=92)
at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qassert.cpp:114
#9 0x00007ffff6833934 in QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_defaultLocalePrivate> >::operator* (this=this@entry=0x7ffff72b4ce0 <defaultLocalePrivate>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:92
#10 0x00007ffff683394e in QLocale::QLocale (this=this@entry=0x7ffff2e21d20) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/text/qlocale.cpp:1214
#11 0x00007ffff6514058 in QResourceFileEnginePrivate::QResourceFileEnginePrivate (this=0x508000000320, q=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qresource.cpp:1401
#12 0x00007ffff650de5d in QResourceFileEngine::QResourceFileEngine (this=this@entry=0x502000000770, file=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qresource.cpp:1416
#13 0x00007ffff64bd53c in std::make_unique<QResourceFileEngine, QString const&> () at /usr/include/c++/14/bits/unique_ptr.h:1077
#14 0x00007ffff64bb710 in _q_createLegacyEngine_recursive (entry=..., data=..., engine=std::unique_ptr<QAbstractFileEngine> = {...}, resolvingEntry=resolvingEntry@entry=false) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qfilesystemengine.cpp:129
#15 0x00007ffff64bc033 in QFileSystemEngine::createLegacyEngine (entry=..., data=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qfilesystemengine.cpp:183
#16 0x00007ffff64aea78 in QFileInfo::exists (path=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qfileinfo.cpp:752
#17 0x00007ffff6493dc7 in QFile::exists (fileName=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qfile.cpp:370
#18 0x00007ffff63f7131 in findConfiguration () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlibraryinfo.cpp:106
#19 0x00007ffff63f7a38 in QLibrarySettings::load (this=this@entry=0x7ffff72af520 <QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qt_library_settings> >::instance()::holder>)
at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlibraryinfo.cpp:79
#20 0x00007ffff63f7cf7 in QLibrarySettings::QLibrarySettings (this=0x7ffff72af520 <QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qt_library_settings> >::instance()::holder>)
at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlibraryinfo.cpp:59
#21 0x00007ffff63f7d33 in (anonymous namespace)::Q_QGS_qt_library_settings::innerFunction (pointer=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlibraryinfo.cpp:55
#22 QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qt_library_settings>::Holder (this=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:37
#23 0x00007ffff63f7da9 in QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qt_library_settings> >::instance () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:100
#24 0x00007ffff63f7e29 in QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qt_library_settings> >::operator() (this=this@entry=0x7ffff72af5a0 <qt_library_settings>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:82
#25 0x00007ffff63f8f65 in havePaths () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlibraryinfo.cpp:148
#26 0x00007ffff63fa746 in QLibraryInfoPrivate::paths (p=p@entry=QLibraryInfo::DataPath, usageMode=usageMode@entry=QLibraryInfoPrivate::RegularUsage) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlibraryinfo.cpp:610
#27 0x00007ffff63fbc70 in QLibraryInfoPrivate::path (p=p@entry=QLibraryInfo::DataPath, usageMode=usageMode@entry=QLibraryInfoPrivate::RegularUsage) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlibraryinfo.cpp:669
#28 0x00007ffff63fbdeb in QLibraryInfo::path (p=p@entry=QLibraryInfo::DataPath) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlibraryinfo.cpp:523
#29 0x00007ffff64ef8ef in QLoggingRegistry::initializeRules (this=this@entry=0x7ffff72b0d60 <QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qtLoggingRegistry> >::instance()::holder>)
at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qloggingregistry.cpp:309
#30 0x00007ffff64f0538 in QLoggingRegistry::QLoggingRegistry (this=0x7ffff72b0d60 <QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qtLoggingRegistry> >::instance()::holder>)
at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qloggingregistry.cpp:239
#31 0x00007ffff64f05f1 in (anonymous namespace)::Q_QGS_qtLoggingRegistry::innerFunction (pointer=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qloggingregistry.cpp:29
#32 QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qtLoggingRegistry>::Holder (this=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:37
#33 0x00007ffff64f0667 in QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qtLoggingRegistry> >::instance () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:100
#34 0x00007ffff64f06e7 in QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qtLoggingRegistry> >::operator() (this=this@entry=0x7ffff72b0ec0 <qtLoggingRegistry>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:82
#35 0x00007ffff64f070a in QLoggingRegistry::instance () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qloggingregistry.cpp:424
#36 0x00007ffff64e9dcf in QLoggingCategory::init (this=0x7ffff72b0c60 <QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qtDefaultCategory> >::instance()::holder>, category=<optimized out>, severityLevel=QtDebugMsg)
at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qloggingcategory.cpp:188
#37 0x00007ffff64e9e58 in QLoggingCategory::QLoggingCategory (this=<optimized out>, category=<optimized out>, enableForLevel=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qloggingcategory.cpp:176
#38 0x00007ffff64e9e7d in (anonymous namespace)::Q_QGS_qtDefaultCategory::innerFunction (pointer=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qloggingcategory.cpp:10
#39 QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qtDefaultCategory>::Holder (this=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:37
#40 0x00007ffff64e9ef3 in QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qtDefaultCategory> >::instance () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:100
#41 0x00007ffff64e9f73 in QGlobalStatic<QtGlobalStatic::Holder<(anonymous namespace)::Q_QGS_qtDefaultCategory> >::operator() (this=this@entry=0x7ffff72b0ca0 <qtDefaultCategory>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qglobalstatic.h:82
#42 0x00007ffff64ea1d6 in QLoggingCategory::defaultCategory () at /home/nico/workspace/qt6-dev/qtbase/src/corelib/io/qloggingcategory.cpp:317
#43 0x00007ffff6404662 in qt_message_print (msgType=msgType@entry=QtWarningMsg, context=..., message=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlogging.cpp:2103
#44 0x00007ffff6404de4 in qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *) (msgType=msgType@entry=QtWarningMsg, context=...,
msg=msg@entry=0x7ffff7046cc0 "QThreadStorage: Thread %p exited after QThreadStorage %d destroyed", ap=ap@entry=0x7ffff3003420) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlogging.cpp:378
#45 0x00007ffff6412b39 in QMessageLogger::warning (this=this@entry=0x7ffff2e20840, msg=msg@entry=0x7ffff7046cc0 "QThreadStorage: Thread %p exited after QThreadStorage %d destroyed") at /home/nico/workspace/qt6-dev/qtbase/src/corelib/global/qlogging.cpp:633
#46 0x00007ffff6ac1994 in QThreadStorageData::finish (p=0x50d0000000a8) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/thread/qthreadstorage.cpp:160
#47 0x00007ffff6a8e4c5 in operator() (__closure=__closure@entry=0x7ffff2d06160) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/thread/qthread_unix.cpp:423
#48 0x00007ffff6a8e5c0 in (anonymous namespace)::terminate_on_exception<QThreadPrivate::finish()::<lambda()> >(struct {...} &&) (t=...) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/thread/qthread_unix.cpp:325
#49 0x00007ffff6a8e6a9 in QThreadPrivate::finish (this=this@entry=0x511000000180) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/thread/qthread_unix.cpp:404
#50 0x00007ffff6a8f9d8 in destroy_current_thread_data (p=0x50d000000040) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/thread/qthread_unix.cpp:154
#51 0x00007ffff6a8fa52 in Cleanup::~Cleanup (this=<optimized out>, __in_chrg=<optimized out>) at /home/nico/workspace/qt6-dev/qtbase/src/corelib/thread/qthread_unix.cpp:204
#52 0x00007ffff5a43eb1 in __run_exit_handlers (status=0, listp=0x7ffff5bfc680 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at exit.c:108
#53 0x00007ffff5a43f80 in __GI_exit (status=<optimized out>) at exit.c:138
It worked until and including 6.9 Beta 1
Bisected to https://codereview.qt-project.org/c/qt/qtbase/+/615204
Found via unit tests from KConfig: https://invent.kde.org/frameworks/kconfig/-/jobs/2499176
- is duplicated by
-
QTBUG-133500 [REG 6.8.1 -> 6.8.2] Crash on exit during logging of thread destruction
-
- Closed
-