Details
-
Bug
-
Resolution: Fixed
-
P3: Somewhat important
-
5.15.17, 6.2.12, 6.5.6, 6.6.3, 6.7.2, 6.8.0 Beta1
-
None
-
-
3
-
01d4be4a8 (dev), 894837577 (6.8)
-
Foundation Sprint 111, Foundation Sprint 112
Description
The following test fails, because the thread cancellation pseudo-exception is delivered via a close() in ~QThreadPipe(), causing std::terminate() to be called.
struct Thread : QThread { void run() override { terminate(); } }; Thread t; t.start(); t.wait();
Backtrace w/o glib:
Thread 2 (Thread 0x7fffe6934700 (LWP 1559591)): #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007fffec9e8859 in __GI_abort () at abort.c:79 #2 0x00007fffed3f8c3d in __gnu_cxx::__verbose_terminate_handler () at ../../../../gcc/libstdc++-v3/libsupc++/vterminate.cc:95 #3 0x00007fffed40a44a in __cxxabiv1::__terminate (handler=<optimized out>) at ../../../../gcc/libstdc++-v3/libsupc++/eh_terminate.cc:48 #4 0x00007fffed3f87e9 in std::terminate () at ../../../../gcc/libstdc++-v3/libsupc++/eh_terminate.cc:58 #5 0x00007fffed3f8708 in __cxxabiv1::__gxx_personality_v0 (version=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>, actions=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>, exception_class=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>, ue_header=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>, context=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>) at ../../../../gcc/libstdc++-v3/libsupc++/eh_personality.cc:677 #6 0x00007fffecbdac30 in _Unwind_ForcedUnwind_Phase2 (exc=0x7fffe6934d70, context=0x7fffe6933590, frames_p=0x7fffe6933498) at ../../../gcc/libgcc/unwind.inc:183 #7 0x00007fffecbdb310 in _Unwind_ForcedUnwind (exc=0x7fffe6934d70, stop=stop@entry=0x7fffed5d1dd0 <unwind_stop>, stop_argument=<optimized out>) at ../../../gcc/libgcc/unwind.inc:218 #8 0x00007fffed5d1f66 in __GI___pthread_unwind (buf=<optimized out>) at unwind.c:121 #9 0x00007fffed5d2099 in __pthread_enable_asynccancel () at ../sysdeps/unix/sysv/linux/x86_64/cancellation.S:70 #10 0x00007fffed5d244d in __close (fd=4) at ../sysdeps/unix/sysv/linux/close.c:27 #11 0x00007ffff1acd63a in QThreadPipe::~QThreadPipe (this=0x51200000ffd4, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/kernel/qeventdispatcher_unix.cpp:58 #12 0x00007ffff1aced60 in QEventDispatcherUNIXPrivate::~QEventDispatcherUNIXPrivate (this=0x51200000ff40, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/kernel/qeventdispatcher_unix.cpp:183 #13 0x00007ffff1aceece in QEventDispatcherUNIXPrivate::~QEventDispatcherUNIXPrivate (this=0x51200000ff40, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/kernel/qeventdispatcher_unix.cpp:183 #14 0x00007ffff12806e5 in QScopedPointerDeleter<QObjectData>::cleanup (pointer=0x51200000ff40) at /home/marc/Qt/qtbase-submit/src/corelib/tools/qscopedpointer.h:24 #15 0x00007ffff1270672 in QScopedPointer<QObjectData, QScopedPointerDeleter<QObjectData> >::~QScopedPointer (this=0x502000001018, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/tools/qscopedpointer.h:81 #16 0x00007ffff121f29d in QObject::~QObject (this=0x502000001010, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/kernel/qobject.cpp:1147 #17 0x00007ffff0f55639 in QAbstractEventDispatcher::~QAbstractEventDispatcher (this=0x502000001010, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/kernel/qabstracteventdispatcher.cpp:177 #18 0x00007ffff0f59031 in QAbstractEventDispatcherV2::~QAbstractEventDispatcherV2 (this=0x502000001010, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/kernel/qabstracteventdispatcher.cpp:658 #19 0x00007ffff1ad0da3 in QEventDispatcherUNIX::~QEventDispatcherUNIX (this=0x502000001010, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/kernel/qeventdispatcher_unix.cpp:268 #20 0x00007ffff1ad0dc6 in QEventDispatcherUNIX::~QEventDispatcherUNIX (this=0x502000001010, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/kernel/qeventdispatcher_unix.cpp:268 #21 0x00007ffff1ac4260 in operator() (__closure=0x7fffe5734520) at /home/marc/Qt/qtbase-submit/src/corelib/thread/qthread_unix.cpp:363 #22 0x00007ffff1acb2b7 in (anonymous namespace)::terminate_on_exception<QThreadPrivate::finish(void*)::<lambda()> >(struct {...} &&) (t=...) at /home/marc/Qt/qtbase-submit/src/corelib/thread/qthread_unix.cpp:261 #23 0x00007ffff1ac4bca in QThreadPrivate::finish (arg=0xf0758b4ce86d8b4c) at /home/marc/Qt/qtbase-submit/src/corelib/thread/qthread_unix.cpp:342 #24 0x00007ffff1ac106c in operator() (__closure=0x7fffe6934650) at /home/marc/Qt/qtbase-submit/src/corelib/thread/qthread_unix.cpp:291 #25 0x00007ffff1acae62 in QScopeGuard<QThreadPrivate::start(void*)::<lambda()> >::~QScopeGuard(void) (this=0x7fffe6934650, __in_chrg=<optimized out>) at /home/marc/Qt/qtbase-submit/src/corelib/tools/qscopeguard.h:41 #26 0x00007fffeca0d2bf in __GI___call_tls_dtors () at cxa_thread_atexit_impl.c:155 #27 0x00007fffed5c7617 in start_thread (arg=<optimized out>) at pthread_create.c:485 #28 0x00007fffecae5353 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
But it also doesn't work with glib.