SUMMARY This is on wayland qt6, unsure if that matters. Please see the stacktrace, it says a lot. Probably a very recent (~1 month) regression as I didn't experience this before STEPS TO REPRODUCE 1. Open krita 2. Open a file 3. Krita stucks 4. Use `kill -ABRT` to generate a coredump OBSERVED RESULT EXPECTED RESULT SOFTWARE/OS VERSIONS Krita: master branch at 2025-09-17 ADDITIONAL INFORMATION ``` #0 0x00007ffff27208bd in syscall () from /nix/store/776irwlgfb65a782cxmyk61pck460fs9-glibc-2.40-66/lib/libc.so.6 #1 0x00007ffff319d305 in QBasicMutex::lockInternal() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #2 0x00007ffff3014cb7 in queued_activate(QObject*, int, QObjectPrivate::Connection*, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #3 0x00007ffff302570d in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #4 0x00007ffff44f6c9e in QAbstractSlider::rangeChanged(int, int) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #5 0x00007ffff44f753a in QAbstractSlider::setRange(int, int) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #6 0x00007ffff461162c in QTextEditPrivate::adjustScrollbars() [clone .part.0] () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #7 0x00007ffff30257ee in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #8 0x00007ffff4637a1c in QWidgetTextControl::documentSizeChanged(QSizeF const&) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #9 0x00007ffff30257ee in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #10 0x00007ffff3ac8efc in ?? () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Gui.so.6 #11 0x00007ffff3b925fb in ?? () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Gui.so.6 #12 0x00007ffff3b62f89 in ?? () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Gui.so.6 #13 0x00007fffb06aff52 in LogDockerDock::insertMessage (this=0x1166d090, type=<optimized out>, msg=...) at /home/user/sources/krita/plugins/dockers/logdocker/LogDockerDock.cpp:311 #14 0x00007ffff3025ab8 in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #15 0x00007fffb06ab840 in QMetaObject::activate<void, QtMsgType, QString> (sender=<optimized out>, mo=0x7fffb06ba400 <MessageSender::staticMetaObject>, local_signal_index=0, ret=0x0) at /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/include/QtCore/qobjectdefs.h:306 #16 MessageSender::emitMessage (this=<optimized out>, _t1=<optimized out>, _t1@entry=QtWarningMsg, _t2=...) at /home/user/sources/krita/build/plugins/dockers/logdocker/kritalogdocker_autogen/EWIEGA46WW/moc_LogDockerDock.cpp:121 #17 0x00007fffb06af6d3 in MessageSender::sendMessage (this=<optimized out>, type=QtWarningMsg, msg=...) at /home/user/sources/krita/plugins/dockers/logdocker/LogDockerDock.cpp:338 #18 LogDockerDock::messageHandler (type=QtWarningMsg, context=..., msg=...) at /home/user/sources/krita/plugins/dockers/logdocker/LogDockerDock.cpp:280 #19 0x00007ffff2f292fb in qt_message_print(QtMsgType, QMessageLogContext const&, QString const&) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #20 0x00007ffff2f2944e in qt_message(QtMsgType, QMessageLogContext const&, char const*, __va_list_tag*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #21 0x00007ffff2ed56df in QMessageLogger::warning(char const*, ...) const () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #22 0x00007ffff301a831 in QMetaObjectPrivate::disconnect(QObject const*, int, QMetaObject const*, QObject const*, int, void**, QMetaObjectPrivate::DisconnectType) [clone .constprop.0] () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #23 0x00007ffff301af56 in QObject::disconnect(QObject const*, char const*, QObject const*, char const*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #24 0x00007ffff77d81c5 in QObject::disconnect (this=<optimized out>, signal=0x0, receiver=0x0, member=0x0) at /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/include/QtCore/qobject.h:292 #25 KisDecorationsManager::setView (this=0x4220478, imageView=...) at /home/user/sources/krita/libs/ui/KisDecorationsManager.cpp:49 #26 0x00007ffff7ba69d3 in KisViewManager::setCurrentView (this=<optimized out>, view=view@entry=0x1a8d7460) at /home/user/sources/krita/libs/ui/KisViewManager.cpp:555 #27 0x00007ffff7b5600c in KisMainWindow::setActiveView (this=0x1c2baa0, view=0x1a8d7460) at /home/user/sources/krita/libs/ui/KisMainWindow.cpp:1678 #28 0x00007ffff7b618c8 in KisMainWindow::showView (this=0x1c2baa0, imageView=0x1a8d7460, subwin=<optimized out>) at /home/user/sources/krita/libs/ui/KisMainWindow.cpp:829 #29 0x00007ffff7b50058 in KisMainWindow::addView (this=0x1c2baa0, view=0x1a8d7460, subWindow=0x0) at /home/user/sources/krita/libs/ui/KisMainWindow.cpp:737 #30 0x00007ffff7b59849 in KisMainWindow::addViewAndNotifyLoadingCompleted (this=this@entry=0x1c2baa0, document=document@entry=0x5dc5440, subWindow=subWindow@entry=0x0) at /home/user/sources/krita/libs/ui/KisMainWindow.cpp:1149 #31 0x00007ffff7b59968 in KisMainWindow::slotLoadCompleted (this=0x1c2baa0) at /home/user/sources/krita/libs/ui/KisMainWindow.cpp:1174 #32 0x00007ffff3025ab8 in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #33 0x00007ffff7b2dc38 in KisDocument::openPathInternal (this=this@entry=0x5dc5440, path=...) at /home/user/sources/krita/libs/ui/KisDocument.cpp:2580 #34 0x00007ffff7b369f1 in KisDocument::openPath (this=this@entry=0x5dc5440, _path=..., flags=..., flags@entry=...) at /home/user/sources/krita/libs/ui/KisDocument.cpp:1933 #35 0x00007ffff7b5aa55 in KisMainWindow::openDocumentInternal (this=this@entry=0x1c2baa0, path=..., flags=flags@entry=...) at /home/user/sources/krita/libs/ui/KisMainWindow.cpp:1098 #36 0x00007ffff7b5b1b1 in KisMainWindow::openDocument (this=0x1c2baa0, path=..., flags=..., flags@entry=...) at /home/user/sources/krita/libs/ui/KisMainWindow.cpp:1072 #37 0x00007ffff78434eb in KisWelcomePageWidget::recentDocumentClicked (this=0x39cab00, index=...) at /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/include/QtCore/qflags.h:77 #38 0x00007ffff7580d96 in KisWelcomePageWidget::qt_static_metacall (_o=0x39cab00, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/user/sources/krita/build/libs/ui/kritaui_autogen/EWIEGA46WW/moc_KisWelcomePageWidget.cpp:215 #39 0x00007ffff3025ab8 in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #40 0x00007ffff46cca6c in QAbstractItemView::clicked(QModelIndex const&) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #41 0x00007ffff46dacff in QAbstractItemView::mouseReleaseEvent(QMouseEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #42 0x00007ffff472f9c8 in QListView::mouseReleaseEvent(QMouseEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #43 0x00007ffff440db08 in QWidget::event(QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #44 0x00007ffff4467c9a in QFrame::event(QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #45 0x00007ffff2fb742e in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #46 0x00007ffff43a1c1d in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #47 0x00007ffff43acb32 in QApplication::notify(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #48 0x00007ffff7b11dae in KisApplication::notify (this=0x7ffffffdd0f0, receiver=0x1da4590, event=0x7ffffffdc270) at /home/user/sources/krita/libs/ui/KisApplication.cpp:864 #49 0x00007ffff2fb76f8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #50 0x00007ffff43ab459 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #51 0x00007ffff4423393 in QWidgetWindow::handleMouseEvent(QMouseEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #52 0x00007ffff4425e10 in QWidgetWindow::event(QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #53 0x00007ffff43a1c2d in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #54 0x00007ffff7b11dae in KisApplication::notify (this=0x7ffffffdd0f0, receiver=0x4302980, event=0x7ffffffdc5e0) at /home/user/sources/krita/libs/ui/KisApplication.cpp:864 #55 0x00007ffff2fb76f8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #56 0x00007ffff3807586 in ?? () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Gui.so.6 #57 0x00007ffff3877174 in ?? () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Gui.so.6 #58 0x00007ffff38773b0 in ?? () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Gui.so.6 #59 0x00007ffff301694a in QObject::event(QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #60 0x00007ffff43a1c2d in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #61 0x00007ffff7b11dae in KisApplication::notify (this=0x7ffffffdd0f0, receiver=0xf29d50, event=0x7fffd80034e0) at /home/user/sources/krita/libs/ui/KisApplication.cpp:864 #62 0x00007ffff2fb76f8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #63 0x00007ffff2fbb5e8 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #64 0x00007ffff32e64ff in postEventSourceDispatch(_GSource*, int (*)(void*), void*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #65 0x00007ffff2503f2d in g_main_context_dispatch_unlocked () from /nix/store/qfm3kqdbpd289nnmdhd4dis4svd2nzwv-glib-2.84.4/lib/libglib-2.0.so.0 #66 0x00007ffff2506278 in g_main_context_iterate_unlocked.isra () from /nix/store/qfm3kqdbpd289nnmdhd4dis4svd2nzwv-glib-2.84.4/lib/libglib-2.0.so.0 #67 0x00007ffff2506b0f in g_main_context_iteration () from /nix/store/qfm3kqdbpd289nnmdhd4dis4svd2nzwv-glib-2.84.4/lib/libglib-2.0.so.0 #68 0x00007ffff32e5b93 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #69 0x00007ffff2fc649b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #70 0x00007ffff2fc1501 in QCoreApplication::exec() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #71 0x0000000000409fce in main (argc=<optimized out>, argv=<optimized out>) at /home/user/sources/krita/krita/main.cc:802 ```
it also randomly stuck when closing the krita program, with similar stack trace ``` #0 0x00007ffff27208bd in syscall () from /nix/store/776irwlgfb65a782cxmyk61pck460fs9-glibc-2.40-66/lib/libc.so.6 #1 0x00007ffff319d305 in QBasicMutex::lockInternal() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #2 0x00007ffff3014cb7 in queued_activate(QObject*, int, QObjectPrivate::Connection*, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #3 0x00007ffff302570d in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #4 0x00007ffff44f6c9e in QAbstractSlider::rangeChanged(int, int) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #5 0x00007ffff44f753a in QAbstractSlider::setRange(int, int) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #6 0x00007ffff461162c in QTextEditPrivate::adjustScrollbars() [clone .part.0] () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #7 0x00007ffff30257ee in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #8 0x00007ffff4637a1c in QWidgetTextControl::documentSizeChanged(QSizeF const&) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #9 0x00007ffff30257ee in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #10 0x00007ffff3ac8efc in ?? () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Gui.so.6 #11 0x00007ffff3b925fb in ?? () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Gui.so.6 #12 0x00007ffff3b62f89 in ?? () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Gui.so.6 #13 0x00007fffbca2ef52 in LogDockerDock::insertMessage (this=0x116269c0, type=<optimized out>, msg=...) at /home/user/sources/krita/plugins/dockers/logdocker/LogDockerDock.cpp:311 #14 0x00007ffff3025ab8 in void doActivate<false>(QObject*, int, void**) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #15 0x00007fffbca2a840 in QMetaObject::activate<void, QtMsgType, QString> (sender=<optimized out>, mo=0x7fffbca39400 <MessageSender::staticMetaObject>, local_signal_index=0, ret=0x0) at /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/include/QtCore/qobjectdefs.h:306 #16 MessageSender::emitMessage (this=<optimized out>, _t1=<optimized out>, _t1@entry=QtWarningMsg, _t2=...) at /home/user/sources/krita/build/plugins/dockers/logdocker/kritalogdocker_autogen/EWIEGA46WW/moc_LogDockerDock.cpp:121 #17 0x00007fffbca2e6d3 in MessageSender::sendMessage (this=<optimized out>, type=QtWarningMsg, msg=...) at /home/user/sources/krita/plugins/dockers/logdocker/LogDockerDock.cpp:338 #18 LogDockerDock::messageHandler (type=QtWarningMsg, context=..., msg=...) at /home/user/sources/krita/plugins/dockers/logdocker/LogDockerDock.cpp:280 #19 0x00007ffff2f292fb in qt_message_print(QtMsgType, QMessageLogContext const&, QString const&) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #20 0x00007ffff2f2944e in qt_message(QtMsgType, QMessageLogContext const&, char const*, __va_list_tag*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #21 0x00007ffff2ed56df in QMessageLogger::warning(char const*, ...) const () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #22 0x00007ffff301a831 in QMetaObjectPrivate::disconnect(QObject const*, int, QMetaObject const*, QObject const*, int, void**, QMetaObjectPrivate::DisconnectType) [clone .constprop.0] () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #23 0x00007ffff301af56 in QObject::disconnect(QObject const*, char const*, QObject const*, char const*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #24 0x00007ffff7063a43 in QObject::disconnect (this=0x11749c40, signal=0x0, receiver=0x0, member=0x0) at /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/include/QtCore/qobject.h:292 #25 KisResourceItemChooser::~KisResourceItemChooser (this=0x11749c40, __in_chrg=<optimized out>) at /home/user/sources/krita/libs/resourcewidgets/KisResourceItemChooser.cpp:298 #26 0x00007ffff7063b21 in KisResourceItemChooser::~KisResourceItemChooser (this=0x11749c40, __in_chrg=<optimized out>) at /home/user/sources/krita/libs/resourcewidgets/KisResourceItemChooser.cpp:300 #27 0x00007ffff301cddd in QObjectPrivate::deleteChildren() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #28 0x00007ffff4408448 in QWidget::~QWidget() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #29 0x00007ffff7996f11 in KisPresetChooser::~KisPresetChooser (this=0x1167c470, __in_chrg=<optimized out>) at /home/user/sources/krita/libs/ui/widgets/kis_preset_chooser.cpp:208 #30 0x00007ffff301cddd in QObjectPrivate::deleteChildren() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #31 0x00007ffff4408448 in QWidget::~QWidget() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #32 0x00007ffff7992071 in KisPaintOpPresetsChooserPopup::~KisPaintOpPresetsChooserPopup (this=0x1173db70, __in_chrg=<optimized out>) at /home/user/sources/krita/libs/ui/widgets/kis_paintop_presets_chooser_popup.cpp:104 #33 0x00007ffff301cddd in QObjectPrivate::deleteChildren() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #34 0x00007ffff4408448 in QWidget::~QWidget() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #35 0x00007fffbcecaf76 in PresetDockerDock::~PresetDockerDock (this=0x1173eaf0, __in_chrg=<optimized out>) at /home/user/sources/krita/build/plugins/dockers/presetdocker/kritapresetdocker_autogen/EWIEGA46WW/../../../../../../plugins/dockers/presetdocker/presetdocker_dock.h:17 #36 PresetDockerDock::~PresetDockerDock (this=0x1173eaf0, __in_chrg=<optimized out>) at /home/user/sources/krita/build/plugins/dockers/presetdocker/kritapresetdocker_autogen/EWIEGA46WW/../../../../../../plugins/dockers/presetdocker/presetdocker_dock.h:17 #37 0x00007ffff301cddd in QObjectPrivate::deleteChildren() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #38 0x00007ffff4408448 in QWidget::~QWidget() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #39 0x00007ffff7b57e7b in KisMainWindow::~KisMainWindow (this=0x1a54360, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /home/user/sources/krita/libs/ui/KisMainWindow.cpp:715 #40 0x00007ffff7b57f21 in KisMainWindow::~KisMainWindow (this=0x1a54360, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /home/user/sources/krita/libs/ui/KisMainWindow.cpp:715 #41 0x00007ffff3016836 in QObject::event(QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #42 0x00007ffff43a1c2d in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Widgets.so.6 #43 0x00007ffff7b11dae in KisApplication::notify (this=0x7ffffffdd0f0, receiver=0x1a54360, event=0x1d12b820) at /home/user/sources/krita/libs/ui/KisApplication.cpp:864 #44 0x00007ffff2fb76f8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #45 0x00007ffff2fbb5e8 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #46 0x00007ffff32e64ff in postEventSourceDispatch(_GSource*, int (*)(void*), void*) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #47 0x00007ffff2503f2d in g_main_context_dispatch_unlocked () from /nix/store/qfm3kqdbpd289nnmdhd4dis4svd2nzwv-glib-2.84.4/lib/libglib-2.0.so.0 #48 0x00007ffff2506278 in g_main_context_iterate_unlocked.isra () from /nix/store/qfm3kqdbpd289nnmdhd4dis4svd2nzwv-glib-2.84.4/lib/libglib-2.0.so.0 #49 0x00007ffff2506b0f in g_main_context_iteration () from /nix/store/qfm3kqdbpd289nnmdhd4dis4svd2nzwv-glib-2.84.4/lib/libglib-2.0.so.0 #50 0x00007ffff32e5b93 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #51 0x00007ffff2fc649b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #52 0x00007ffff2fc1501 in QCoreApplication::exec() () from /nix/store/dkfr32yi7p8cdxsnll05q1kax19fl7ay-qtbase-6.9.2/lib/libQt6Core.so.6 #53 0x0000000000409fce in main (argc=<optimized out>, argv=<optimized out>) at /home/user/sources/krita/krita/main.cc:802 ```
I get bunch of messages like this in the log, unsure if it's relevant ``` QObject::disconnect: wildcard call disconnects from destroyed signal of KisAction::view_toggle_painting_assistants QObject::disconnect: wildcard call disconnects from destroyed signal of KisAction::view_toggle_assistant_previews QObject::disconnect: wildcard call disconnects from destroyed signal of KToggleAction::mirror_canvas QObject::disconnect: wildcard call disconnects from destroyed signal of KToggleAction::mirror_canvas_around_cursor QObject::disconnect: wildcard call disconnects from destroyed signal of KToggleAction::mirror_canvas_around_canvas QObject::disconnect: wildcard call disconnects from destroyed signal of KisResourceItemChooser::unnamed QObject::disconnect: wildcard call disconnects from destroyed signal of KisResourceItemChooser::brush_selector QObject::disconnect: wildcard call disconnects from destroyed signal of KisResourceItemChooser::unnamed QObject::disconnect: wildcard call disconnects from destroyed signal of KisResourceItemChooser::unnamed QObject::disconnect: wildcard call disconnects from destroyed signal of KisResourceItemChooser::unnamed QObject::disconnect: wildcard call disconnects from destroyed signal of KisResourceItemChooser::unnamed QObject::disconnect: wildcard call disconnects from destroyed signal of KisResourceItemChooser::unnamed QObject::disconnect: wildcard call disconnects from destroyed signal of KisResourceItemChooser::unnamed ```
I dug into the stack more and did some test, I think this issue is specific to the "QObject::disconnect: wildcard call disconnects from destroyed signal of ..." error message I mentioned in the previous comment. Here’s what’s happening in the stack trace above: 1. Qt's event handling code generates "QObject::disconnect: wildcard call disconnects from destroyed signal of ..." warning 2. The `LogDockerDock` handles it (because we installed a custom handler with `qInstallMessageHandler`) 3. The `LogDockerDock` updates its text, because the size of text passed a threshold, it triggers some slider change, all these on the same thread. 4. The slider code then tries to enqueue a new event to Qt event loop, however, the warning message generating code in step 1 still holds relevant mutex, causing the deadlock, due to reentrancy. This matches my experiments: if I try to enqueue an event inside the LogDockerDock message handler, it deadlocks immediately. In https://doc.qt.io/qt-6/qtlogging.html#qInstallMessageHandler it requires message handler to be "reentrant", "avoid recursion", and preferably "minimal". Which I think we are violating here in `LogDockerDock`, as updating text in the log docker is pretty complex operation
Thanks askmeaboutloom for pointing out this, the problematic warning message is recently added to Qt ( https://github.com/qt/qtbase/commit/a79d5b8d0856a8f6c4de56a8d982c84ea20905a6 ) . I'm using Qt 6.9.2. Perhaps it's not reproducible with Krita appimage as it currently have older version
Any thoughts on how to address this? Here are some ways but none of them are ideal 1. Create a new QThread just to "bounce" the log message, to avoid emitting event in message handler 2. Use a periodic QTimer to refresh the log viewer instead of updating it directly in message handler 3. Defer (queue) the log message that begins with "QObject::disconnect" 4. File a ticket to upstream. They log a message while holding a mutex seems simply to be a unnecessary, oversight.