Summary: | Clicking on notifications occasionally crashes Plasmashell in ShellCorona::screenInvariants() | ||
---|---|---|---|
Product: | [Plasma] plasmashell | Reporter: | Mark <mark> |
Component: | Desktop Containment | Assignee: | Plasma Bugs List <plasma-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | akselmo, kde, kde, nate, notmart, postix |
Priority: | NOR | ||
Version: | 6.0.3 | ||
Target Milestone: | 1.0 | ||
Platform: | openSUSE | ||
OS: | Linux | ||
See Also: |
https://bugs.kde.org/show_bug.cgi?id=413782 https://bugs.kde.org/show_bug.cgi?id=456947 |
||
Latest Commit: | Version Fixed In: | 6.2.4 | |
Sentry Crash Report: | https://crash-reports.kde.org/organizations/kde/issues/5387/ |
Description
Mark
2024-03-31 20:36:10 UTC
Can't reproduce it on master. What I tried was locking my session, sending myself email and waiting for the KMail notification ding, then unlock my session and open the notification panel. Operating System: Fedora Linux 40 KDE Plasma Version: 6.0.80 KDE Frameworks Version: 6.1.0 Qt Version: 6.6.2 Kernel Version: 6.8.2-300.fc40.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 Hm, now I can reproduce this! I have no idea what causes it, but I did not have to lock my screen to make it happen. Will keep investigating. My backtrace #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44 #1 0x00007f31a14ab1b3 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:78 #2 0x00007f31a145365e in __GI_raise (sig=6) at ../sysdeps/posix/raise.c:26 #3 0x00007f31a5887f78 in KCrash::defaultCrashHandler (sig=6) at /home/akseli/Repositories/kde/src/kcrash/src/kcrash.cpp:593 #4 0x00007f31a1453710 in <signal handler called> () at /lib64/libc.so.6 #5 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44 #6 0x00007f31a14ab1b3 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:78 #7 0x00007f31a145365e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #8 0x00007f31a143b902 in __GI_abort () at abort.c:79 #9 0x00007f31a1aca48d in qAbort () at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/global/qglobal.cpp:161 #10 0x00007f31a1b1567d in qt_message_fatal<QString&> (context=<optimized out>, message=...) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/global/qlogging.cpp:2003 #11 qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *) (msgType=msgType@entry=QtFatalMsg, context=..., msg=msg@entry=0x7f31a1e9ad70 "ASSERT: \"%s\" in file %s, line %d", ap=ap@entry=0x7fff0704f910) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/global/qlogging.cpp:378 #12 0x00007f31a1acb3f5 in QMessageLogger::fatal (this=this@entry=0x7fff0704f9f8, msg=msg@entry=0x7f31a1e9ad70 "ASSERT: \"%s\" in file %s, line %d") at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/global/qlogging.cpp:901 #13 0x00007f31a1aca3e3 in qt_assert (assertion=<optimized out>, file=<optimized out>, line=<optimized out>) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/global/qassert.cpp:68 #14 0x000000000048c0aa in ShellCorona::screenInvariants (this=0x2558be0) at /home/akseli/Repositories/kde/src/plasma-workspace/shell/shellcorona.cpp:878 #15 0x00000000004c5543 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (ShellCorona::*)() const>::call(void (ShellCorona::*)() const, ShellCorona*, void**) (f=(void (ShellCorona::*)(const class ShellCorona * const)) 0x48bc00 <ShellCorona::screenInvariants() const>, o=0x2558be0, arg=0x7fff0704fd60) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:153 #16 0x00000000004bdd4a in QtPrivate::FunctionPointer<void (ShellCorona::*)() const>::call<QtPrivate::List<>, void>(void (ShellCorona::*)() const, ShellCorona*, void**) (f=(void (ShellCorona::*)(const class ShellCorona * const)) 0x48bc00 <ShellCorona::screenInvariants() const>, o=0x2558be0, arg=0x7fff0704fd60) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:194 #17 0x00000000004b6209 in QtPrivate::QCallableObject<void (ShellCorona::*)() const, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x29d98c0, r=0x2558be0, a=0x7fff0704fd60, ret=0x0) at /usr/include/qt6/QtCore/qobjectdefs_impl.h:520 #18 0x00007f31a1bf2684 in QtPrivate::QSlotObjectBase::call (this=0x29d98c0, r=<optimized out>, a=0x7fff0704fd60) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qobjectdefs_impl.h:433 #19 doActivate<false> (sender=0x2558d10, signal_index=3, argv=0x7fff0704fd60) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qobject.cpp:4039 #20 0x00007f31a1be8fd7 in QMetaObject::activate (sender=<optimized out>, m=m@entry=0x7f31a2068ec0, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fff0704fd60) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qobject.cpp:4099 #21 0x00007f31a1c0178d in QTimer::timeout (this=<optimized out>, _t1=...) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/redhat-linux-build/src/corelib/Core_autogen/include/moc_qtimer.cpp:272 #22 0x00007f31a1be249f in QObject::event (this=0x2558d10, e=0x7fff0704fef0) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qobject.cpp:1459 #23 0x00007f31a4787f68 in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x2558d10, e=0x7fff0704fef0) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/widgets/kernel/qapplication.cpp:3296 #24 0x00007f31a1b8f218 in QCoreApplication::notifyInternal2 (receiver=0x2558d10, event=0x7fff0704fef0) --Type <RET> for more, q to quit, c to continue without paging--c at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1121 #25 0x00007f31a1b8f42d in QCoreApplication::sendEvent (receiver=<optimized out>, event=<optimized out>) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qcoreapplication.cpp:1539 #26 0x00007f31a1d43c46 in QTimerInfoList::activateTimers (this=0x24a1bc0) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qtimerinfo_unix.cpp:507 #27 0x00007f31a1e66b21 in timerSourceDispatch (source=<optimized out>) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:149 #28 idleTimerSourceDispatch (source=<optimized out>) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:196 #29 0x00007f31a0bed68c in g_main_dispatch (context=0x7f3188000f00) at ../glib/gmain.c:3344 #30 g_main_context_dispatch_unlocked (context=0x7f3188000f00) at ../glib/gmain.c:4152 #31 0x00007f31a0c4e788 in g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x7f3188000f00, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217 #32 0x00007f31a0beeb03 in g_main_context_iteration (context=0x7f3188000f00, may_block=1) at ../glib/gmain.c:4282 #33 0x00007f31a1e66de3 in QEventDispatcherGlib::processEvents (this=0x241ec00, flags=...) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/kernel/qeventdispatcher_glib.cpp:393 #34 0x00007f31a1b9c053 in QEventLoop::exec (this=this@entry=0x7fff070501c0, flags=..., flags@entry=...) at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/global/qflags.h:34 #35 0x00007f31a1b97ffc in QCoreApplication::exec () at /usr/src/debug/qt6-qtbase-6.6.2-6.fc40.x86_64/src/corelib/global/qflags.h:74 #36 0x0000000000442190 in main (argc=2, argv=0x7fff07050c58) at /home/akseli/Repositories/kde/src/plasma-workspace/shell/main.cpp:188 See Bug 413782 and Bug 456947 which were previous cases of ShellCorona::screenInvariants() causing a crash. Sentry says this instance of it is in the top 15 of all Plasma crashes. Seems like a particularly buggy component. We believe this is fixed in 6.2, lets close this and track on Sentry It's not; Sentry just got a crash from 6.2.1: https://crash-reports.kde.org/organizations/kde/issues/6066/events/4be2fa61f5514369a3b3e0028fccf10c/?referrer=user-feedback A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/4900 Git commit 08174d25e0a12f385da4ae11e960eb7d12e3fa0f by Marco Martin. Committed on 15/11/2024 at 14:57. Pushed by mart into branch 'master'. X11/multiscreen: Always emit outputOrderChanged when a screen is disconnected Don't remove immediately the output from m_outputOrder. This fixes screen removal both the "normal" case and the case of last screen removed that causes the last QScreen to become ":0.0" named. Why the current master was broken: In X11OutputOrderWatcher when a screen is disconnected it removes immediately the screen from m_outputOrder, but then on the timecompressed check in refresh() the outputorderchanged is emitted by comparing with m_outputOrder which is "new" already, so the signal is not emitted. This makes plasma not remove the corresponding DesktopView (and panels) staying with an inconsistent internal state, either failing screenInvariants() or ending up with wrong desktops and panels on wrong screen if invariants are disabled M +3 -17 libkworkspace/outputorderwatcher.cpp https://invent.kde.org/plasma/plasma-workspace/-/commit/08174d25e0a12f385da4ae11e960eb7d12e3fa0f A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/4917 Git commit eb1896d2df36e7f6945df8d3c615a924a15cb536 by Marco Martin. Committed on 15/11/2024 at 15:35. Pushed by mart into branch 'Plasma/6.2'. X11/multiscreen: Always emit outputOrderChanged when a screen is disconnected Don't remove immediately the output from m_outputOrder. This fixes screen removal both the "normal" case and the case of last screen removed that causes the last QScreen to become ":0.0" named. Why the current master was broken: In X11OutputOrderWatcher when a screen is disconnected it removes immediately the screen from m_outputOrder, but then on the timecompressed check in refresh() the outputorderchanged is emitted by comparing with m_outputOrder which is "new" already, so the signal is not emitted. This makes plasma not remove the corresponding DesktopView (and panels) staying with an inconsistent internal state, either failing screenInvariants() or ending up with wrong desktops and panels on wrong screen if invariants are disabled (cherry picked from commit 08174d25e0a12f385da4ae11e960eb7d12e3fa0f) M +3 -17 libkworkspace/outputorderwatcher.cpp https://invent.kde.org/plasma/plasma-workspace/-/commit/eb1896d2df36e7f6945df8d3c615a924a15cb536 Please re-open if you're still able to reproduce this crash in Plasma 6.2.4. Thanks a lot folks! |