https://bugs.kde.org/show_bug.cgi?id=420776

            Bug ID: 420776
           Summary: Crash when disconnecting external displays from the
                    laptop
           Product: kwin
           Version: unspecified
          Platform: Other
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: wayland-generic
          Assignee: kwin-bugs-n...@kde.org
          Reporter: aleix...@kde.org
  Target Milestone: ---

(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

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to