Desktop: check containment availability first before `usedInAccentColor`
There is a race when the application is closing down, the containment is destroyed before DesktopView receives containmentChanged, which triggers a binding update, but usedInAccentColor will access the dangling containment, which will cause a crash. Possible backtrace: ``` Stack trace of thread 25161: #0 0x00007f5ba42949ec __pthread_kill_implementation (libc.so.6 + 0x949ec) #1 0x00007f5ba4241176 raise (libc.so.6 + 0x41176) #2 0x00007f5ba7632bc3 _ZN6KCrash19defaultCrashHandlerEi (libKF6Crash.so.6 + 0x6bc3) #3 0x00007f5ba4241240 __restore_rt (libc.so.6 + 0x41240) #4 0x00007f5ba74a4aa3 _ZNK6Plasma11Containment8activityEv (libPlasma.so.6 + 0x2baa3) #5 0x000000000045a93d _ZNK11ShellCorona20screenForContainmentEPKN6Plasma11ContainmentE (plasmashell + 0x5a93d) #6 0x00000000004404d5 _ZNK11DesktopView17usedInAccentColorEv (plasmashell + 0x404d5) #7 0x000000000042dc25 _ZN11DesktopView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv (plasmashell + 0x2dc25) #8 0x00007f5ba5df21e0 _ZN3QV4L12loadPropertyEPNS_15ExecutionEngineEPNS_4Heap6ObjectEP7QObjectRK16QQmlPropertyData (libQt6Qml.so.6 + 0x1f21e0) #9 0x00007f5b5eb932a7 n/a (n/a + 0x0) #10 0x00007f5ba5e4bc88 _ZN3QV44Moth3VME4execEPNS_17JSTypesStackFrameEPNS_15ExecutionEngineE (libQt6Qml.so.6 + 0x24bc88) #11 0x00007f5ba5dbd25e _ZN3QV4L6doCallEPNS_8FunctionEPKNS_5ValueES4_iPNS_16ExecutionContextE (libQt6Qml.so.6 + 0x1bd25e) #12 0x00007f5ba5ef25d8 _ZN24QQmlJavaScriptExpression8evaluateEPN3QV48CallDataEPb (libQt6Qml.so.6 + 0x2f25d8) #13 0x00007f5ba5e86b63 _ZN11QQmlBinding8evaluateEPb (libQt6Qml.so.6 + 0x286b63) #14 0x00007f5ba5e8b80f _ZN11QQmlBinding8doUpdateERKN24QQmlJavaScriptExpression13DeleteWatcherE6QFlagsIN16QQmlPropertyData9WriteFlagEERN3QV45ScopeE (libQt6Qml.so.6 + 0x28b80f) #15 0x00007f5ba5e89894 _ZN11QQmlBinding6updateE6QFlagsIN16QQmlPropertyData9WriteFlagEE (libQt6Qml.so.6 + 0x289894) #16 0x00007f5ba5f12be8 _ZN12QQmlNotifier10emitNotifyEP20QQmlNotifierEndpointPPv (libQt6Qml.so.6 + 0x312be8) #17 0x00007f5ba4bda4c8 _Z10doActivateILb0EEvP7QObjectiPPv (libQt6Core.so.6 + 0x1da4c8) #18 0x00007f5ba5eb6e72 _ZN8QQmlData9destroyedEP7QObject (libQt6Qml.so.6 + 0x2b6e72) #19 0x00007f5ba4bcf702 _ZN7QObjectD2Ev (libQt6Core.so.6 + 0x1cf702) #20 0x00007f5ba773bf9a n/a (libPlasmaQuick.so.6 + 0x38f9a) #21 0x00007f5ba77362b8 n/a (libPlasmaQuick.so.6 + 0x332b8) #22 0x00007f5ba4bdaa83 _ZN9QtPrivate15QSlotObjectBase4callEP7QObjectPPv (libQt6Core.so.6 + 0x1daa83) #23 0x00007f5ba74a16e2 _ZN6Plasma6Applet13appletDeletedEPS0_ (libPlasma.so.6 + 0x286e2) #24 0x00007f5ba74987a4 _ZN6Plasma6AppletD1Ev (libPlasma.so.6 + 0x1f7a4) #25 0x00007f5ba74a46e9 _ZN6Plasma11ContainmentD0Ev (libPlasma.so.6 + 0x2b6e9) #26 0x0000000000465581 _ZN11ShellCoronaD2Ev (plasmashell + 0x65581) #27 0x00000000004659c9 _ZN11ShellCoronaD0Ev (plasmashell + 0x659c9) #28 0x00007f5ba4bcaba7 _ZN7QObject5eventEP6QEvent (libQt6Core.so.6 + 0x1caba7) #29 0x00007f5ba6dc1a7e _ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent (libQt6Widgets.so.6 + 0x1c1a7e) #30 0x00007f5ba4b87998 _ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent (libQt6Core.so.6 + 0x187998) #31 0x00007f5ba4b87cf7 _ZN23QCoreApplicationPrivate16sendPostedEventsEP7QObjectiP11QThreadData (libQt6Core.so.6 + 0x187cf7) #32 0x00007f5ba4b8be03 _ZN16QCoreApplication4execEv (libQt6Core.so.6 + 0x18be03) #33 0x00000000004288a7 main (plasmashell + 0x288a7) #34 0x00007f5ba422a1f0 __libc_start_call_main (libc.so.6 + 0x2a1f0) #35 0x00007f5ba422a2b9 __libc_start_main@@GLIBC_2.34 (libc.so.6 + 0x2a2b9) #36 0x00000000004289e5 _start (plasmashell + 0x289e5) ``` (cherry picked from commit 1c22c2dd)
Please register or sign in to comment