Bug 436367

Summary: kwin_wayland crashes occasionally when enabling monitor
Product: [Plasma] kwin Reporter: Alois Wohlschlager <alois1>
Component: wayland-genericAssignee: KWin default assignee <kwin-bugs-null>
Status: RESOLVED FIXED    
Severity: crash    
Priority: NOR    
Version: 5.21.4   
Target Milestone: ---   
Platform: openSUSE   
OS: Linux   
See Also: https://bugs.kde.org/show_bug.cgi?id=450501
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Alois Wohlschlager 2021-04-29 15:57:55 UTC
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
Comment 1 Alois Wohlschlager 2021-06-16 07:56:56 UTC
I have not been able to reproduce the bug any more on 5.22, so I assume it is fixed.