Details
-
Bug
-
Resolution: Unresolved
-
P1: Critical
-
None
-
6.8
-
-
Multimedia wk 15-16, Multimedia wk 17-18, Multimedia wk 19-20, Multimedia wk 21-22
Description
crash on exit during static dtor:
==261772==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7c4478d8a657 bp 0x7c438da55300 sp 0x7c438da55200 T58613) ==261772==The signal is caused by a READ memory access. ==261772==Hint: address points to the zero page. QThreadStorage: Thread 0x502000b1d310 exited after QThreadStorage 2 destroyed AddressSanitizer:DEADLYSIGNAL QThreadStorage: Thread 0x502001f3fff0 exited after QThreadStorage 2 destroyed AddressSanitizer:DEADLYSIGNAL #0 0x7c4478d8a657 in QThreadStorageData::get() const /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthreadstorage.cpp:86:23 #1 0x7c447b3e7bba in QGuiGLThreadContext*& qThreadStorage_localData<QGuiGLThreadContext>(QThreadStorageData&, QGuiGLThreadContext**) /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthreadstorage.h:35:18 #2 0x7c447b3d8d0c in QThreadStorage<QGuiGLThreadContext*>::localData() /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthreadstorage.h:109:14 #3 0x7c447b3cefdd in QOpenGLContext::currentContext() /home/tim/dev/qt6-dev/qtbase/src/gui/kernel/qopenglcontext.cpp:227:69 #4 0x7c447b43b330 in currentSurfaceForCurrentContext(QOpenGLContext*) /home/tim/dev/qt6-dev/qtbase/src/gui/rhi/qrhigles2.cpp:597:9 #5 0x7c447b43af16 in QRhiGles2::ensureContext(QSurface*) const /home/tim/dev/qt6-dev/qtbase/src/gui/rhi/qrhigles2.cpp:626:13 #6 0x7c447b448d37 in QRhiGles2::destroy() /home/tim/dev/qt6-dev/qtbase/src/gui/rhi/qrhigles2.cpp:1111:5 #7 0x7c447acda20f in QRhi::~QRhi() /home/tim/dev/qt6-dev/qtbase/src/gui/rhi/qrhi.cpp:8393:8 #8 0x7c447d20f67b in (anonymous namespace)::State::resetRhi() /home/tim/dev/qt6-dev/qtmultimedia/src/multimedia/video/qvideoframeconverter.cpp:48:9 #9 0x7c447d20c534 in (anonymous namespace)::State::~State() /home/tim/dev/qt6-dev/qtmultimedia/src/multimedia/video/qvideoframeconverter.cpp:44:9 #10 0x7c447d21036a in void qThreadStorage_deleteData<(anonymous namespace)::State>(void*, (anonymous namespace)::State*) /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthreadstorage.h:84:3 #11 0x7c447d21032c in QThreadStorage<(anonymous namespace)::State>::deleteData(void*) /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthreadstorage.h:99:7 #12 0x7c4478d8b357 in QThreadStorageData::finish(void**) /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthreadstorage.cpp:164:9 #13 0x7c4478d2b54f in QThreadPrivate::finish(void*)::$_0::operator()() const /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthread_unix.cpp:352:9 #14 0x7c4478d26624 in void (anonymous namespace)::terminate_on_exception<QThreadPrivate::finish(void*)::$_0>(QThreadPrivate::finish(void*)::$_0&&) /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthread_unix.cpp:262:9 #15 0x7c4478d264ca in QThreadPrivate::finish(void*) /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthread_unix.cpp:339:5 #16 0x7c4478d2a563 in destroy_current_thread_data(void*) /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthread_unix.cpp:102:9 #17 0x7c4477091690 in __GI___nptl_deallocate_tsd nptl/nptl_deallocate_tsd.c:73:29 #18 0x7c4477091690 in __GI___nptl_deallocate_tsd nptl/nptl_deallocate_tsd.c:22:1 #19 0x7c4477094949 in start_thread nptl/pthread_create.c:453:3 #20 0x7c447712684f misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81 AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV /home/tim/dev/qt6-dev/qtbase/src/corelib/thread/qthreadstorage.cpp:86:23 in QThreadStorageData::get() const Thread T58613 (videoQueue:src) created by T0 here: #0 0x624354de512d in pthread_create (/home/tim/build/build-qt6-dev-clang_17_qt_dev-Debug2/qtmultimedia/tests/auto/integration/qcamerabackend/tst_qcamerabackend+0x11512d) (BuildId: b65dd22b0c8af109) #1 0x7c447c170504 in g_system_thread_new debian/build/deb/../../../glib/gthread-posix.c:1323:9 ==261772==ABORTING
it seems that we have a thread-local QRhi instance, which is living on a gstreamer thread. the dtor seems to crash in QGLXContext::makeCurrent during static destruction.
happened on tst_qcamerabackend. rarely occurs, address sanitizer seems to make it more likely