Bug 456743

Summary: With only 1 screen, plasmashell crashed in ScreenPool::handleScreenAdded() on wakeup from sleep
Product: [Plasma] plasmashell Reporter: Pawel <bednarczyk.pawel>
Component: generic-multiscreenAssignee: Plasma Bugs List <plasma-bugs>
Status: RESOLVED FIXED    
Severity: crash CC: aleixpol, bednarczyk.pawel, nate, notmart, xaver.hugl
Priority: NOR Keywords: wayland
Version: 5.25.3   
Target Milestone: 1.0   
Platform: Other   
OS: Linux   
See Also: https://bugs.kde.org/show_bug.cgi?id=456385
Latest Commit: Version Fixed In:
Sentry Crash Report:
Attachments: gdb dump

Description Pawel 2022-07-15 07:59:45 UTC
Created attachment 150642 [details]
gdb dump

plasma shell crashed when I logged back in when the computer was woken up from sleep.

dump with full debug symbols attached. 

running the below did not help - I had to restart the PC:

plasmashell --replace </dev/null &>/dev/null & disown  

Operating System: Arch Linux
KDE Plasma Version: 5.25.3
KDE Frameworks Version: 5.96.0
Qt Version: 5.15.5
Kernel Version: 5.18.11-arch1-1 (64-bit)
Graphics Platform: Wayland
Processors: 16 × AMD Ryzen 7 3700X 8-Core Processor
Memory: 31.3 GiB of RAM
Graphics Processor: AMD Radeon RX 6800 XT
Comment 1 Nate Graham 2022-07-15 20:16:46 UTC
Thread 1 (Thread 0x7face7e1c340 (LWP 120470)):
#0  __GI___pthread_sigmask (how=1, newmask=<optimized out>, oldmask=0x0) at pthread_sigmask.c:43
#1  0x00007facec03eadd in __GI___sigprocmask (how=<optimized out>, set=<optimized out>, oset=<optimized out>) at ../sysdeps/unix/sysv/linux/sigprocmask.c:25
#2  0x00007faceea2d1eb in KCrash::setCrashHandler (handler=handler@entry=0x0) at /usr/src/debug/kcrash-5.96.0/src/kcrash.cpp:415
#3  0x00007faceea2f85f in KCrash::defaultCrashHandler (sig=11) at /usr/src/debug/kcrash-5.96.0/src/kcrash.cpp:632
#4  <signal handler called>
#5  PlasmaQuick::ContainmentView::containment (this=0x0) at /usr/src/debug/plasma-framework-5.96.0/src/plasmaquick/containmentview.cpp:256
#6  0x0000561b9c94da6f in ShellCorona::screenForContainment (this=0x561b9d26f600, containment=<optimized out>) at /usr/src/debug/plasma-workspace-5.25.3.1/shell/shellcorona.cpp:1951
#7  0x0000561b9c94b05a in ShellCorona::createContainmentForActivity (this=0x561b9d26f600, activity=..., screenNum=0) at /usr/src/debug/plasma-workspace-5.25.3.1/shell/shellcorona.cpp:1260
#8  0x0000561b9c941aa4 in ShellCorona::addOutput (this=0x561b9d26f600, screen=<optimized out>) at /usr/src/debug/plasma-workspace-5.25.3.1/shell/shellcorona.cpp:1202
#9  0x00007facecabd341 in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=<optimized out>, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#10 doActivate<false> (sender=0x561b9d2f5640, signal_index=3, argv=0x7ffc080afe40) at kernel/qobject.cpp:3886
#11 0x0000561b9c95cbca in ScreenPool::screenAdded (_t1=0x561b9d6a9de0, this=0x561b9d2f5640) at /usr/src/debug/build/shell/plasmashell_autogen/include/moc_screenpool.cpp:159
#12 ScreenPool::handleScreenAdded (this=0x561b9d2f5640, screen=<optimized out>) at /usr/src/debug/plasma-workspace-5.25.3.1/shell/screenpool.cpp:417
#13 0x00007facecabd341 in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=<optimized out>, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#14 doActivate<false> (sender=0x561b9d2f0950, signal_index=3, argv=0x7ffc080aff70) at kernel/qobject.cpp:3886
#15 0x0000561b9c93b42e in PrimaryOutputWatcher::primaryOutputNameChanged (_t2=..., _t1=..., this=0x561b9d2f0950) at /usr/src/debug/build/shell/plasmashell_autogen/EWIEGA46WW/moc_primaryoutputwatcher.cpp:136
#16 PrimaryOutputWatcher::setPrimaryOutputName (this=0x561b9d2f0950, newOutputName=...) at /usr/src/debug/plasma-workspace-5.25.3.1/shell/primaryoutputwatcher.cpp:76
#17 0x00007facecabd341 in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=<optimized out>, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#18 doActivate<false> (sender=0x7ffc080b0a60, signal_index=9, argv=0x7ffc080b0080) at kernel/qobject.cpp:3886
#19 0x00007facecf41087 in QGuiApplication::screenAdded (this=<optimized out>, _t1=<optimized out>) at .moc/moc_qguiapplication.cpp:389
#20 0x00007facea9848c9 in QtWaylandClient::QWaylandDisplay::handleScreenInitialized (this=0x561b9d250b00, screen=<optimized out>) at /usr/src/debug/qtwayland/src/client/qwaylanddisplay.cpp:460
#21 0x00007facea9914c4 in QtWaylandClient::QWaylandScreen::maybeInitialize (this=0x7facd0005c10) at /usr/src/debug/qtwayland/src/client/qwaylandscreen.cpp:108
#22 QtWaylandClient::QWaylandScreen::maybeInitialize (this=0x7facd0005c10) at /usr/src/debug/qtwayland/src/client/qwaylandscreen.cpp:99
#23 0x00007facee21c536 in ffi_call_unix64 () at ../src/x86/unix64.S:105
#24 0x00007facee219037 in ffi_call_int (cif=<optimized out>, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>, closure=<optimized out>) at ../src/x86/ffi64.c:672
#25 0x00007faceecae645 in wl_closure_invoke (closure=closure@entry=0x7facd80064d0, target=<optimized out>, target@entry=0x561b9d56e110, opcode=opcode@entry=2, data=<optimized out>, flags=1) at ../wayland-1.21.0/src/connection.c:1025
#26 0x00007faceecaee03 in dispatch_event (display=display@entry=0x561b9d254f90, queue=0x561b9d255060) at ../wayland-1.21.0/src/wayland-client.c:1595
#27 0x00007faceecaeffc in dispatch_queue (queue=0x561b9d255060, display=0x561b9d254f90) at ../wayland-1.21.0/src/wayland-client.c:1741
#28 wl_display_dispatch_queue_pending (display=0x561b9d254f90, queue=0x561b9d255060) at ../wayland-1.21.0/src/wayland-client.c:1983
#29 0x00007facea981c56 in QtWaylandClient::QWaylandDisplay::flushRequests (this=<optimized out>) at /usr/src/debug/qtwayland/src/client/qwaylanddisplay.cpp:253
#30 0x00007facecab0440 in QObject::event (this=0x561b9d250b00, e=0x7face0004e70) at kernel/qobject.cpp:1314
#31 0x00007faced778b3c in QApplicationPrivate::notify_helper (this=<optimized out>, receiver=0x561b9d250b00, e=0x7face0004e70) at kernel/qapplication.cpp:3637
#32 0x00007faceca8cad8 in QCoreApplication::notifyInternal2 (receiver=0x561b9d250b00, event=0x7face0004e70) at kernel/qcoreapplication.cpp:1064
#33 0x00007faceca8d5e3 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x561b9d243f90) at kernel/qcoreapplication.cpp:1821
#34 0x00007facecad3548 in postEventSourceDispatch (s=0x561b9d26ca10) at kernel/qeventdispatcher_glib.cpp:277
#35 0x00007faceb06fc6b in g_main_dispatch (context=0x561b9d26de80) at ../glib/glib/gmain.c:3417
#36 g_main_context_dispatch (context=0x561b9d26de80) at ../glib/glib/gmain.c:4135
#37 0x00007faceb0c6001 in g_main_context_iterate.constprop.0 (context=context@entry=0x561b9d26de80, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4211
#38 0x00007faceb06d392 in g_main_context_iteration (context=0x561b9d26de80, may_block=1) at ../glib/glib/gmain.c:4276
#39 0x00007facecad732c in QEventDispatcherGlib::processEvents (this=0x561b9d2215a0, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#40 0x00007faceca8527c in QEventLoop::exec (this=0x7ffc080b08e0, flags=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69
#41 0x00007faceca8fda9 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#42 0x00007facecf3a092 in QGuiApplication::exec () at kernel/qguiapplication.cpp:1867
#43 0x00007faced776f4a in QApplication::exec () at kernel/qapplication.cpp:2829
#44 0x0000561b9c91c0e3 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/plasma-workspace-5.25.3.1/shell/main.cpp:240
Comment 2 Nate Graham 2022-07-15 20:18:05 UTC
How many screens do you have?
Comment 3 Pawel 2022-07-15 20:32:33 UTC
hi Nate,

Just 1. What I forgot to include is that weirdly, after I typed in my password, I got this unlock icon I had to click to log in. No password, just click unlock.
Comment 4 Pawel 2022-07-15 20:33:26 UTC
(In reply to Pawel from comment #3)
> hi Nate,
> 
> Just 1. What I forgot to include is that weirdly, after I typed in my
> password, I got this unlock icon I had to click to log in. No password, just
> click unlock.

and this was after I upgraded to 5.25.3.1 on Arch
Comment 5 Nate Graham 2022-07-19 14:58:44 UTC
Thanks, seems like something is going wrong in the multiscreen code, as it's adding and removing screens in the backend when it shouldn't have to.
Comment 6 Pawel 2022-09-16 12:25:15 UTC
I have the below entries in kwinrc:

[DrmOutputs][1107ab8123][1107ab8123]
Mode=2560x1440_143999
Scale=1
Transform=normal

[DrmOutputs][782ea3ba-3e9f-564e-a0c4-9e88bde6aa7f][782ea3ba-3e9f-564e-a0c4-9e88bde6aa7f]
Mode=2560x1440_143999
Scale=1
Transform=normal

[DrmOutputs][b8e58b19-91aa-5dac-b0d0-99a4f6a1a60a][b8e58b19-91aa-5dac-b0d0-99a4f6a1a60a]
Mode=2560x1440_143999
Scale=1
Transform=normal

Is this expected considering I only have 1 monitor? I haven't had the crash since and I am not sure if I should be expecting the Unlock button on  single screen set up.
Comment 7 Nate Graham 2022-09-16 18:45:10 UTC
I see several on mine so maybe that's intentional.

What's the output of `kscreen-doctor -o`?
Comment 8 Pawel 2022-09-17 08:44:21 UTC
hi Nate,

Output: 1 ASUSTek COMPUTER INC ASUS XG32VQR/93493 enabled connected primary DisplayPort Modes: 0:2560x1440@144*! 1:2560x1440@120 2:2560x1440@120 3:2560x1440@100 4:2560x1440@96 5:2560x1440@72 6:2560x1440@60 7:2560x1440@60 8:2560x1440@50 9:2560x1440@48 10:1920x1200@144 11:1920x1080@120 12:1920x1080@120 13:1920x1080@60 14:1920x1080@60 15:1920x1080@60 16:1920x1080@50 17:1600x1200@144 18:1680x1050@60 19:1280x1024@75 20:1280x1024@60 21:1440x900@60 22:1280x960@60 23:1280x800@144 24:1152x864@75 25:1280x720@120 26:1280x720@120 27:1280x720@60 28:1280x720@60 29:1280x720@60 30:1280x720@50 31:1440x576@50 32:1440x576@50 33:1024x768@75 34:1024x768@70 35:1024x768@60 36:1440x480@60 37:1440x480@60 38:1440x480@60 39:1440x480@60 40:800x600@75 41:800x600@72 42:800x600@60 43:800x600@56 44:720x576@50 45:720x576@50 46:720x480@60 47:720x480@60 48:720x480@60 49:720x480@60 50:640x480@75 51:640x480@73 52:640x480@67 53:640x480@60 54:640x480@60 55:640x480@60 56:720x400@70 57:1600x900@60 Geometry: 0,0 2560x1440 Scale: 1 Rotation: 1 Overscan: 0 Vrr: Automatic RgbRange: unknown primary
Comment 9 Nate Graham 2022-09-19 21:16:19 UTC
That looks okay, thanks.
Comment 10 Zamundaaa 2022-09-24 23:03:51 UTC
The [DrmOutputs] sections in kwinrc are just a relic from older versions of KWin, they aren't relevant for this (or anything else, you can remove them if you want)
Comment 11 Marco Martin 2023-02-13 13:48:28 UTC
the crashing piece of code in that BT still exists, even tough the views lifecycle within m_desktopViewForScreen changes significantly, so this may or may not still be valid.

the code is

for (auto it = m_desktopViewForScreen.constBegin(), end = m_desktopViewForScreen.constEnd(); it != end; ++it) { (arounf line 2167 now)

(a dangling pointer in the m_desktopViewForScreen containmner)


Needs to keep an eye open if a crash there still happens in 5.27
Comment 12 Nate Graham 2023-04-21 15:38:47 UTC
No new reports from Plasma 5.27 so far. Pawel, could you check to see if *this specific crash* is still an issue for you in Plasma 5.27.4 or newer? Thanks!
Comment 13 Pawel 2023-04-21 16:18:36 UTC
Hi Nate,

I have not had this specific crash for a long time. Hard to say when exactly this might have been fixed but I am happy to mark as resolved and reopen in the future if the crash reoccurs.
Comment 14 Nate Graham 2023-04-21 16:44:27 UTC
Great, thanks so much for following up!