SUMMARY I was running a Wayland session with an external monitor connected and the laptop lid closed, so the external monitor was the only output. When I opened the lid, kwin_wayland aborted. STEPS TO REPRODUCE 1. Connect external screen 2. Close lid 3. Open lid OBSERVED RESULT kwin_wayland aborts and crashes. EXPECTED RESULT kwin_wayland continues running. SOFTWARE/OS VERSIONS Windows: macOS: Linux/KDE Plasma: (available in About System) KDE Plasma Version: 5.21.4 KDE Frameworks Version: 5.81.0 Qt Version: 5.15.2 ADDITIONAL INFORMATION I got the same crash in a slightly different situation as well [1]. There, the laptop monitor was black when I opened the lid, and the crash happened when I tried to enable the internal monitor from system settings. Backtrace: #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:49 #1 0x00007f1cac700914 in __GI_abort () at abort.c:100 #2 0x00007f1cac700749 in __assert_fail_base (fmt=0x7f1ca5ee5554 "%s%s%s:%u: %s%sZusicherung »%s« nicht erfüllt.\n%n", assertion=0x7f1cacc65750 "0 && \"Couldn't find current GLX or EGL context.\\n\"", file=0x7f1cacc65829 "../src/dispatch_common.c", line=858, function=<optimized out>) at assert.c:92 #3 0x00007f1cac70f9b6 in __GI___assert_fail (assertion=assertion@entry=0x7f1cacc65750 "0 && \"Couldn't find current GLX or EGL context.\\n\"", file=file@entry=0x7f1cacc65829 "../src/dispatch_common.c", line=line@entry=858, function=function@entry=0x7f1cacc65c80 <__PRETTY_FUNCTION__.0.lto_priv.0> "epoxy_get_proc_address") at assert.c:101 #4 0x00007f1cacc41df7 in epoxy_get_proc_address (name=0x7f1cacc4c139 <entrypoint_strings.lto_priv+9849> "glDeleteProgram") at ../src/dispatch_common.c:858 #5 0x00007f1cacbf105a in epoxy_glDeleteProgram_resolver () at src/gl_generated_dispatch.c:81668 #6 epoxy_glDeleteProgram_global_rewrite_ptr (program=30) at src/gl_generated_dispatch.c:49458 #7 0x00007f1ca4bcba40 in QScopedPointerDeleter<KWin::GLShader>::cleanup(KWin::GLShader*) (pointer=0x564d95405b40) at /usr/include/qt5/QtCore/qscopedpointer.h:52 #8 QScopedPointerDeleter<KWin::GLShader>::cleanup(KWin::GLShader*) (pointer=0x564d95405b40) at /usr/include/qt5/QtCore/qscopedpointer.h:52 #9 QScopedPointer<KWin::GLShader, QScopedPointerDeleter<KWin::GLShader> >::~QScopedPointer() (this=0x564d953d0838, this=<optimized out>) at /usr/include/qt5/QtCore/qscopedpointer.h:107 #10 KWin::LanczosFilter::~LanczosFilter() (this=0x564d953d0810, this=<optimized out>) at /usr/src/debug/kwin5-5.21.4-1.2.x86_64/plugins/scenes/opengl/lanczosfilter.cpp:47 #11 0x00007f1ca4bd6cd0 in KWin::LanczosFilter::~LanczosFilter() (this=0x564d953d0810, this=<optimized out>) at /usr/src/debug/kwin5-5.21.4-1.2.x86_64/plugins/scenes/opengl/lanczosfilter.cpp:47 #12 operator() (__closure=0x564d951c8ee0) at /usr/src/debug/kwin5-5.21.4-1.2.x86_64/plugins/scenes/opengl/scene_opengl.cpp:1042 #13 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, KWin::SceneOpenGL2::performPaintWindow(KWin::EffectWindowImpl*, int, const QRegion&, KWin::WindowPaintData&)::<lambda()> >::call (arg=<optimized out>, f=...) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:146 #14 QtPrivate::Functor<KWin::SceneOpenGL2::performPaintWindow(KWin::EffectWindowImpl*, int, const QRegion&, KWin::WindowPaintData&)::<lambda()>, 0>::call<QtPrivate::List<>, void> (arg=<optimized out>, f=...) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:256 #15 QtPrivate::QFunctorSlotObject<KWin::SceneOpenGL2::performPaintWindow(KWin::EffectWindowImpl*, int, const QRegion&, KWin::WindowPaintData&)::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x564d951c8ed0, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/qt5/QtCore/qobjectdefs_impl.h:443 #16 0x00007f1cae1e2c17 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffca5e27b50, r=0x564d9432c0a0, this=0x564d951c8ed0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398 #17 doActivate<false>(QObject*, int, void**) (sender=0x564d93d79c10, signal_index=4, argv=0x7ffca5e27b50) at kernel/qobject.cpp:3886 #18 0x00007f1cae1e2c17 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffca5e27c30, r=0x564d93d79c10, this=0x564d93d67840) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398 #19 doActivate<false>(QObject*, int, void**) (sender=0x564d93c57360, signal_index=3, argv=0x7ffca5e27c30, argv@entry=0x0) at kernel/qobject.cpp:3886 #20 0x00007f1cae1dbf60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x564d93c57360, m=m@entry=0x7f1cadebe100, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x0) at kernel/qobject.cpp:3946 #21 0x00007f1cadc67a30 in KWin::Platform::screensQueried() (this=this@entry=0x564d93c57360) at /usr/src/debug/kwin5-5.21.4-1.2.x86_64/build/kwin_autogen/EWIEGA46WW/moc_platform.cpp:359 #22 0x00007f1ca6752242 in KWin::DrmBackend::enableOutput(KWin::DrmOutput*, bool) (this=0x564d93c57360, output=<optimized out>, enable=<optimized out>) at /usr/src/debug/kwin5-5.21.4-1.2.x86_64/plugins/platforms/drm/drm_backend.cpp:521 #23 0x00007f1ca676176c in KWin::DrmOutput::atomicEnable() (this=<optimized out>) at /usr/src/debug/kwin5-5.21.4-1.2.x86_64/plugins/platforms/drm/drm_output.cpp:488 #24 0x00007f1cadd22980 in KWin::Platform::requestOutputsChange(KWaylandServer::OutputConfigurationInterface*) (this=0x564d93c57360, config=0x564d95b74d90) at /usr/src/debug/kwin5-5.21.4-1.2.x86_64/platform.cpp:135 #25 0x00007f1cae1e2c17 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffca5e27e90, r=0x564d93c225d0, this=0x564d93c541d0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398 #26 doActivate<false>(QObject*, int, void**) (sender=0x564d93c540e0, signal_index=4, argv=argv@entry=0x7ffca5e27e90) at kernel/qobject.cpp:3886 #27 0x00007f1cae1dbf60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=<optimized out>, m=m@entry=0x7f1cace503c0 <KWaylandServer::OutputManagementInterface::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffca5e27e90) at kernel/qobject.cpp:3946 #28 0x00007f1cacd63e7f in KWaylandServer::OutputManagementInterface::configurationChangeRequested(KWaylandServer::OutputConfigurationInterface*) (this=<optimized out>, _t1=<optimized out>) at /usr/src/debug/kwayland-server-5.21.4-1.2.x86_64/build/src/server/KWaylandServer_autogen/EWIEGA46WW/moc_outputmanagement_interface.cpp:136 #29 0x00007f1ca98e242d in ffi_call_unix64 () at ../src/x86/unix64.S:106 #30 0x00007f1ca98de4f9 in ffi_call_int (cif=<optimized out>, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>, closure=<optimized out>) at ../src/x86/ffi64.c:669 #31 0x00007f1caa3db005 in wl_closure_invoke (closure=closure@entry=0x564d9648ec10, target=<optimized out>, target@entry=0x564d954ed3a0, opcode=opcode@entry=5, data=<optimized out>, data@entry=0x564d94ac23d0, flags=<optimized out>) at src/connection.c:1018 #32 0x00007f1caa3deedc in wl_client_connection_data (fd=<optimized out>, mask=<optimized out>, data=<optimized out>) at src/wayland-server.c:432 #33 0x00007f1caa3ddad2 in wl_event_loop_dispatch (loop=0x564d93c46000, timeout=timeout@entry=0) at src/event-loop.c:1027 #34 0x00007f1cacd78866 in KWaylandServer::Display::dispatchEvents() (this=<optimized out>) at /usr/src/debug/kwayland-server-5.21.4-1.2.x86_64/src/server/display.cpp:107 #35 0x00007f1cae1e2c17 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffca5e286e0, r=0x564d93c50430, this=0x564d9488efc0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398 #36 doActivate<false>(QObject*, int, void**) (sender=0x564d9499b730, signal_index=3, argv=argv@entry=0x7ffca5e286e0) at kernel/qobject.cpp:3886 #37 0x00007f1cae1dbf60 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x564d9499b730, m=m@entry=0x7f1cae491a60, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffca5e286e0) at kernel/qobject.cpp:3946 #38 0x00007f1cae1e60bf in QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) (this=this@entry=0x564d9499b730, _t1=..., _t2=<optimized out>, _t3=...) at .moc/moc_qsocketnotifier.cpp:178 #39 0x00007f1cae1e68bb in QSocketNotifier::event(QEvent*) (this=0x564d9499b730, e=0x7ffca5e287f0) at kernel/qsocketnotifier.cpp:302 #40 0x00007f1cad1b3aff in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x564d9499b730, e=0x7ffca5e287f0) at kernel/qapplication.cpp:3632 #41 0x00007f1cae1ac13a in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x564d9499b730, event=0x7ffca5e287f0) at kernel/qcoreapplication.cpp:1063 #42 0x00007f1cae20109b in QEventDispatcherUNIXPrivate::activateSocketNotifiers() (this=0x564d93c00e40) at kernel/qeventdispatcher_unix.cpp:304 #43 0x00007f1cae2014f3 in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at kernel/qeventdispatcher_unix.cpp:511 #44 0x0000564d92461c1d in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at qunixeventdispatcher.cpp:63 #45 0x00007f1cae1aab7b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffca5e28980, flags=..., flags@entry=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69 #46 0x00007f1cae1b2db0 in QCoreApplication::exec() () at ../../include/QtCore/../../src/corelib/global/qflags.h:121 #47 0x00007f1cae60da9c in QGuiApplication::exec() () at kernel/qguiapplication.cpp:1867 #48 0x00007f1cad1b3a75 in QApplication::exec() () at kernel/qapplication.cpp:2824 #49 0x0000564d9240552c in main(int, char**) (argc=<optimized out>, argv=0x7ffca5e28bc0) at /usr/src/debug/kwin5-5.21.4-1.2.x86_64/main_wayland.cpp:788 [1] https://bugs.kde.org/show_bug.cgi?id=435941#c1
I have not been able to reproduce the bug any more on 5.22, so I assume it is fixed.