SUMMARY If Dolphin terminal is open, and one types exit there and then closes Dolphin, Dolphin crashes due to a dangling pointer. STEPS TO REPRODUCE 1. Open Dolphin and it's terminal panel 2. Type exit in terminal panel 3. Close Dolphin OBSERVED RESULT Dolphin crashes EXPECTED RESULT Dolphin closes without crashing SOFTWARE/OS VERSIONS Operating System: Fedora Linux 39 KDE Plasma Version: 5.91.90 KDE Frameworks Version: 5.248.0 Qt Version: 6.6.0 Kernel Version: 6.6.9-200.fc39.x86_64 (64-bit) Graphics Platform: Wayland Processors: 12 × AMD Ryzen 5 3600 6-Core Processor Memory: 15.5 GiB of RAM Graphics Processor: AMD Radeon RX 6600 BACKTRACE: #0 QObjectPrivate::ConnectionData::signalVectorCount (this=0x121b470) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qobject_p_p.h:219 #1 0x00007ffff37f9b68 in QMetaObjectPrivate::disconnect (sender=0x112f9f0, signal_index=0, smeta=0x5d5120 <QObject::staticMetaObject@Qt_6>, receiver=0xb20ee0, method_index=-1, slot=0x7fffffffb8e0, disconnectType=QMetaObjectPrivate::DisconnectAll) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qobject.cpp:3649 #2 0x00007ffff37f9e29 in QObject::disconnectImpl (sender=0x112f9f0, signal=<optimized out>, receiver=0xb20ee0, slot=0x7fffffffb8e0, senderMetaObject=0x5d5120 <QObject::staticMetaObject@Qt_6>) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qobject.cpp:5277 #3 0x00000000004b98a2 in QObject::disconnect<void (QObject::*)(QObject*), void (TerminalPanel::*)()> (sender=0x112f9f0, signal=(void (QObject::*)(QObject * const, QObject *)) 0x438490 <QObject::destroyed(QObject*)@plt>, receiver=0xb20ee0, slot=(void (TerminalPanel::*)(TerminalPanel * const)) 0x4b663a <TerminalPanel::terminalExited()>) at /usr/include/qt6/QtCore/qobject.h:276 #4 0x00000000004b64fd in TerminalPanel::~TerminalPanel (this=0xb20ee0, __in_chrg=<optimized out>) at /home/akseli/Repositories/kde/src/dolphin/src/panels/terminal/terminalpanel.cpp:53 #5 0x00000000004b6566 in TerminalPanel::~TerminalPanel (this=0xb20ee0, __in_chrg=<optimized out>) at /home/akseli/Repositories/kde/src/dolphin/src/panels/terminal/terminalpanel.cpp:55 #6 0x00007ffff37fa71d in QObjectPrivate::deleteChildren (this=this@entry=0xaae930) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qobject.cpp:2206 #7 0x00007ffff4a19b18 in QWidget::~QWidget (this=0xa76040, __in_chrg=<optimized out>) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/widgets/kernel/qwidget.cpp:1537 #8 0x0000000000521061 in DolphinDockWidget::~DolphinDockWidget (this=0xa76040, __in_chrg=<optimized out>) at /home/akseli/Repositories/kde/src/dolphin/src/dolphindockwidget.cpp:55 #9 0x0000000000521082 in DolphinDockWidget::~DolphinDockWidget (this=0xa76040, __in_chrg=<optimized out>) at /home/akseli/Repositories/kde/src/dolphin/src/dolphindockwidget.cpp:55 #10 0x00007ffff37fa71d in QObjectPrivate::deleteChildren (this=this@entry=0xae1240) --Type <RET> for more, q to quit, c to continue without paging--c at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qobject.cpp:2206 #11 0x00007ffff4a19b18 in QWidget::~QWidget (this=0xac7100, __in_chrg=<optimized out>) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/widgets/kernel/qwidget.cpp:1537 #12 0x00007ffff687dba7 in KMainWindow::~KMainWindow (this=0xac7100, __in_chrg=<optimized out>) at /home/akseli/Repositories/kde/src/kxmlgui/src/kmainwindow.cpp:433 #13 0x00007ffff68f8d84 in KXmlGuiWindow::~KXmlGuiWindow (this=0xac7100, __vtt_parm=0x54b368 <VTT for DolphinMainWindow+8>, __in_chrg=<optimized out>) at /home/akseli/Repositories/kde/src/kxmlgui/src/kxmlguiwindow.cpp:217 #14 0x00000000004471db in DolphinMainWindow::~DolphinMainWindow (this=0xac7100, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /home/akseli/Repositories/kde/src/dolphin/src/dolphinmainwindow.cpp:223 #15 0x0000000000447234 in DolphinMainWindow::~DolphinMainWindow (this=0xac7100, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at /home/akseli/Repositories/kde/src/dolphin/src/dolphinmainwindow.cpp:223 #16 0x00007ffff37f3419 in QObject::event (this=0xac7100, e=0x1034ad0) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qobject.cpp:1424 #17 0x00007ffff6880256 in KMainWindow::event (this=0xac7100, ev=0x1034ad0) at /home/akseli/Repositories/kde/src/kxmlgui/src/kmainwindow.cpp:905 #18 0x00007ffff68f8edb in KXmlGuiWindow::event (this=0xac7100, ev=0x1034ad0) at /home/akseli/Repositories/kde/src/kxmlgui/src/kxmlguiwindow.cpp:221 #19 0x0000000000448e25 in DolphinMainWindow::event (this=0xac7100, event=0x1034ad0) at /home/akseli/Repositories/kde/src/dolphin/src/dolphinmainwindow.cpp:562 #20 0x00007ffff49c2b38 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0xac7100, e=0x1034ad0) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/widgets/kernel/qapplication.cpp:3290 #21 0x00007ffff37a0ba8 in QCoreApplication::notifyInternal2 (receiver=0xac7100, event=0x1034ad0) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qcoreapplication.cpp:1118 #22 0x00007ffff37a0dad in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qcoreapplication.cpp:1536 #23 0x00007ffff37a4aa5 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x6355c0) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qcoreapplication.cpp:1898 #24 0x00007ffff37a4e1d in QCoreApplication::sendPostedEvents (receiver=<optimized out>, event_type=<optimized out>) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qcoreapplication.cpp:1757 #25 0x00007ffff3a410bf in postEventSourceDispatch (s=0x6b4da0) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:243 #26 0x00007ffff1b11e5c in g_main_dispatch (context=0x7fffdc000ef0) at ../glib/gmain.c:3476 #27 g_main_context_dispatch_unlocked (context=0x7fffdc000ef0) at ../glib/gmain.c:4284 #28 0x00007ffff1b6cf18 in g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7fffdc000ef0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4349 #29 0x00007ffff1b0fad3 in g_main_context_iteration (context=0x7fffdc000ef0, may_block=1) at ../glib/gmain.c:4414 #30 0x00007ffff3a4096f in QEventDispatcherGlib::processEvents (this=0x638c00, flags=...) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:393 #31 0x00007ffff37ad9bb in QEventLoop::exec (this=this@entry=0x7fffffffc280, flags=..., flags@entry=...) at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/global/qflags.h:34 #32 0x00007ffff37a97bd in QCoreApplication::exec () at /usr/src/debug/qt6-qtbase-6.6.0-6.fc39.x86_64/src/corelib/global/qflags.h:74 #33 0x000000000043f6ba in main (argc=1, argv=0x7fffffffd7e8) at /home/akseli/Repositories/kde/src/dolphin/src/main.cpp:253
Git commit 1a59905027e578e396216b1f11831c80ec87db4f by Akseli Lahtinen. Committed on 10/01/2024 at 10:22. Pushed by akselmo into branch 'master'. terminalpanel.cpp: Set m_konsolePart to nullptr during exit signal If Dolphin terminal is open, and one types `exit` there and then closes Dolphin, Dolphin crashes due to a dangling pointer. Konsole KPart is deleting itself when Konsole session exits, but Dolphin tracks it as a child of the Terminal Panel. The Terminal Panel doesn't get destroyed when Konsole KPart does, and it tries to double free during children clean up. (Thanks @sitter !) Setting `m_konsolePart` to `nullptr` during exit signal fixes this, since there is already check in place for that in the destructor. M +1 -0 src/panels/terminal/terminalpanel.cpp https://invent.kde.org/system/dolphin/-/commit/1a59905027e578e396216b1f11831c80ec87db4f