Bug 420776 - Crash when disconnecting external displays from the laptop
Summary: Crash when disconnecting external displays from the laptop
Status: RESOLVED WORKSFORME
Alias: None
Product: kwin
Classification: Plasma
Component: wayland-generic (show other bugs)
Version: unspecified
Platform: Other Linux
: NOR crash
Target Milestone: ---
Assignee: KWin default assignee
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-04-29 23:03 UTC by Aleix Pol
Modified: 2022-01-12 16:54 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Aleix Pol 2020-04-29 23:03:11 UTC
(gdb) p area
$1 = (const QRect &) @0x7ffe2713f8b0: {x1 = 0, y1 = 0, x2 = -1, y2 = -1}

Seems like XdgShellClient::finishInit (Frame #8) is trying to place windows into an invalid area.

I don't know how to reproduce, but Workspace::clientArea should probably never return an invalid area.

This happens because it's accessing a screen that doesn't exist anymore though:
(gdb) p Screens::s_self->m_current
$2 = 2

Maybe we could update the current screen earlier?

#0  0x00007fbc91b26ce5 in raise () at /usr/lib/libc.so.6
#1  0x00007fbc91b1092c in abort () at /usr/lib/libc.so.6
#2  0x00007fbc921e5bd1 in qt_message_fatal (context=..., message=<synthetic pointer>...) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.cpp:1914
#3  QMessageLogger::fatal(char const*, ...) const (this=this@entry=0x7ffe2713f720, msg=msg@entry=0x7fbc924ddea0 "ASSERT: \"%s\" in file %s, line %d") at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.cpp:893
#4  0x00007fbc921e4fc5 in qt_assert(char const*, char const*, int) (assertion=<optimized out>, file=<optimized out>, line=<optimized out>) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.h:90
#5  0x00007fbc95e37008 in KWin::Placement::placeOnScreenDisplay(KWin::AbstractClient*, QRect const&) (this=0x561c04b535b0, c=0x561c04b15880, area=...) at /home/apol/devel/frameworks/kwin/placement.cpp:502
#6  0x00007fbc95e35681 in KWin::Placement::place(KWin::AbstractClient*, QRect const&) (this=0x561c04b535b0, c=0x561c04b15880, area=...) at /home/apol/devel/frameworks/kwin/placement.cpp:72
#7  0x00007fbc95d01888 in KWin::AbstractClient::placeIn(QRect const&) (this=0x561c04b15880, area=...) at /home/apol/devel/frameworks/kwin/abstract_client.cpp:259
#8  0x00007fbc95f60f3d in KWin::XdgShellClient::finishInit() (this=0x561c04b15880) at /home/apol/devel/frameworks/kwin/xdgshellclient.cpp:236
#9  0x00007fbc95f70ddf in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (KWin::XdgShellClient::*)()>::call(void (KWin::XdgShellClient::*)(), KWin::XdgShellClient*, void**)
    (f=(void (KWin::XdgShellClient::*)(KWin::XdgShellClient * const)) 0x7fbc95f6082e <KWin::XdgShellClient::finishInit()>, o=0x561c04b15880, arg=0x7ffe2713fa60) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:152
#10 0x00007fbc95f703e7 in QtPrivate::FunctionPointer<void (KWin::XdgShellClient::*)()>::call<QtPrivate::List<>, void>(void (KWin::XdgShellClient::*)(), KWin::XdgShellClient*, void**)
    (f=(void (KWin::XdgShellClient::*)(KWin::XdgShellClient * const)) 0x7fbc95f6082e <KWin::XdgShellClient::finishInit()>, o=0x561c04b15880, arg=0x7ffe2713fa60) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:185
#11 0x00007fbc95f6f017 in QtPrivate::QSlotObject<void (KWin::XdgShellClient::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x561c05038f20, r=0x561c04b15880, a=0x7ffe2713fa60, ret=0x0)
    at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:418
#12 0x00007fbc9243034e in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffe2713fa60, r=0x561c04b15880, this=0x561c05038f20) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:398
#13 doActivate<false>(QObject*, int, void**) (sender=0x561c05a2d470, signal_index=21, argv=0x7ffe2713fa60) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3886
#14 0x00007fbc93881288 in KWaylandServer::SurfaceInterface::committed() (this=0x561c05a2d470) at src/server/KWaylandServer_autogen/EWIEGA46WW/moc_surface_interface.cpp:503
#15 0x00007fbc939332ca in KWaylandServer::SurfaceInterface::Private::commit() (this=0x561c050c7d90) at /home/apol/devel/frameworks/kwayland-server/src/server/surface_interface.cpp:523
#16 0x00007fbc93931cc1 in KWaylandServer::SurfaceInterface::Private::commitCallback(wl_client*, wl_resource*) (client=0x561c04eef300, resource=0x561c04f3dc00) at /home/apol/devel/frameworks/kwayland-server/src/server/surface_interface.cpp:671
#17 0x00007fbc8e26da8d in  () at /usr/lib/libffi.so.7
#18 0x00007fbc8e26d01b in  () at /usr/lib/libffi.so.7
#19 0x00007fbc90e72f62 in  () at /usr/lib/libwayland-server.so.0
#20 0x00007fbc90e6f2dc in  () at /usr/lib/libwayland-server.so.0
#21 0x00007fbc90e70faa in wl_event_loop_dispatch () at /usr/lib/libwayland-server.so.0
#22 0x00007fbc938a043e in KWaylandServer::Display::Private::dispatch() (this=0x561c03e49930) at /home/apol/devel/frameworks/kwayland-server/src/server/display.cpp:134
#23 0x00007fbc938a6a18 in KWaylandServer::Display::Private::installSocketNotifier()::$_0::operator()() const (this=0x561c03e64de0) at /home/apol/devel/frameworks/kwayland-server/src/server/display.cpp:102
#24 0x00007fbc938a69c6 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, KWaylandServer::Display::Private::installSocketNotifier()::$_0>::call(KWaylandServer::Display::Private::installSocketNotifier()::$_0&, void**)
    (f=..., arg=0x7ffe271402f0) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:146
#25 0x00007fbc938a6991 in QtPrivate::Functor<KWaylandServer::Display::Private::installSocketNotifier()::$_0, 0>::call<QtPrivate::List<>, void>(KWaylandServer::Display::Private::installSocketNotifier()::$_0&, void*, void**) (f=..., arg=0x7ffe271402f0)
    at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:256
#26 0x00007fbc938a693c in QtPrivate::QFunctorSlotObject<KWaylandServer::Display::Private::installSocketNotifier()::$_0, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x561c03e64dd0, r=0x561c03e61e40, a=0x7ffe271402f0, ret=0x0) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:443
#27 0x00007fbc9243034e in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7ffe271402f0, r=0x561c03e61e40, this=0x561c03e64dd0) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:398
#28 doActivate<false>(QObject*, int, void**) (sender=0x561c03e64db0, signal_index=3, argv=0x7ffe271402f0) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3886
#29 0x00007fbc9242992f in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x561c03e64db0, m=m@entry=0x7fbc926c8b40 <QSocketNotifier::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffe271402f0)
    at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:3946
#30 0x00007fbc9243427f in QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) (this=this@entry=0x561c03e64db0, _t1=..., _t2=<optimized out>, _t3=...) at .moc/moc_qsocketnotifier.cpp:178
#31 0x00007fbc924349eb in QSocketNotifier::event(QEvent*) (this=0x561c03e64db0, e=0x7ffe271405c0) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qsocketnotifier.cpp:302
#32 0x00007fbc92f05cdf in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=this@entry=0x561c03e09d40, receiver=receiver@entry=0x561c03e64db0, e=e@entry=0x7ffe271405c0) at /home/apol/devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3671
#33 0x00007fbc92f0eb60 in QApplication::notify(QObject*, QEvent*) (this=0x7ffe27140910, receiver=0x561c03e64db0, e=0x7ffe271405c0) at /home/apol/devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3417
#34 0x00007fbc923fa34a in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x561c03e64db0, event=0x7ffe271405c0) at ../../include/QtCore/5.15.0/QtCore/private/../../../../../../../../devel/frameworks/qt5/qtbase/src/corelib/thread/qthread_p.h:325
#35 0x00007fbc9245041b in QEventDispatcherUNIXPrivate::activateSocketNotifiers() (this=0x561c03e18e80) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qeventdispatcher_unix.cpp:304
#36 0x00007fbc9245086b in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qeventdispatcher_unix.cpp:511
#37 0x00007fbc8d3398cd in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...) at /home/apol/devel/frameworks/qt5/qtbase/src/platformsupport/eventdispatchers/qunixeventdispatcher.cpp:63
#38 0x00007fbc923f8f3b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7ffe27140750, flags=..., flags@entry=...) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/global/qflags.h:141
#39 0x00007fbc92400e50 in QCoreApplication::exec() () at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/global/qflags.h:121
#40 0x0000561c03283371 in main(int, char**) (argc=4, argv=0x7ffe27140b78) at /home/apol/devel/frameworks/kwin/main_wayland.cpp:704
Comment 1 Vlad Zahorodnii 2022-01-12 15:12:04 UTC
Is this crash still relevant?
Comment 2 Aleix Pol 2022-01-12 16:54:32 UTC
Probably not, I don't have that laptop anymore.