winft / disman

Qt/C++ display management library
GNU Lesser General Public License v2.1
3 stars 1 forks source link

Crash on new output connection with wlroots backend #27

Closed romangg closed 8 months ago

romangg commented 4 years ago

Have Disman running and connect a second output. Likely an issue in Wrapland though.

#0  std::__uniq_ptr_impl<Wrapland::Client::WlrOutputModeV1::Private, std::default_delete<Wrapland::Client::WlrOutputModeV1::Private> >::_M_ptr (this=0xfe0800000010) at /usr/include/c++/10.2.0/bits/unique_ptr.h:173
#1  0x00007ffff2915772 in std::unique_ptr<Wrapland::Client::WlrOutputModeV1::Private, std::default_delete<Wrapland::Client::WlrOutputModeV1::Private> >::get (this=0xfe0800000010) at /usr/include/c++/10.2.0/bits/unique_ptr.h:422
#2  0x00007ffff2914ff8 in std::unique_ptr<Wrapland::Client::WlrOutputModeV1::Private, std::default_delete<Wrapland::Client::WlrOutputModeV1::Private> >::operator-> (this=0xfe0800000010) at /usr/include/c++/10.2.0/bits/unique_ptr.h:416
#3  0x00007ffff2913d60 in Wrapland::Client::WlrOutputModeV1::size (this=0xfe0800000000) at /home/roman/dev/kde/wrapland/src/src/client/wlr_output_manager_v1.cpp:238
#4  0x00007ffff29dd8f5 in Disman::WlrootsOutput::geometry (this=0x555555613d10) at /home/roman/dev/kde/disman/src/backends/wayland/plugins/wlroots-wrapland/wlroots_output.cpp:90
#5  0x00007ffff34dd8ce in Disman::WaylandScreen::setOutputs (this=0x5555555a3110, outputs=std::vector of length 2, capacity 2 = {...}) at /home/roman/dev/kde/disman/src/backends/wayland/waylandscreen.cpp:50
#6  0x00007ffff34d6816 in Disman::WaylandBackend::setScreenOutputs (this=0x5555555ee570) at /home/roman/dev/kde/disman/src/backends/wayland/waylandbackend.cpp:155
#7  0x00007ffff34db9e4 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (Disman::WaylandBackend::*)()>::call(void (Disman::WaylandBackend::*)(), Disman::WaylandBackend*, void**) (f=(void (Disman::WaylandBackend::*)(Disman::WaylandBackend * const)) 0x7ffff34d6700 <Disman::WaylandBackend::setScreenOutputs()>, o=0x5555555ee570, arg=0x7fffffffca10) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#8  0x00007ffff34db585 in QtPrivate::FunctionPointer<void (Disman::WaylandBackend::*)()>::call<QtPrivate::List<>, void>(void (Disman::WaylandBackend::*)(), Disman::WaylandBackend*, void**) (f=(void (Disman::WaylandBackend::*)(Disman::WaylandBackend * const)) 0x7ffff34d6700 <Disman::WaylandBackend::setScreenOutputs()>, o=0x5555555ee570, arg=0x7fffffffca10) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#9  0x00007ffff34daf75 in QtPrivate::QSlotObject<void (Disman::WaylandBackend::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x5555555a1c50, r=0x5555555ee570, a=0x7fffffffca10, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#10 0x00007ffff7570036 in ?? () from /usr/lib/libQt5Core.so.5
#11 0x00007ffff33acdb9 in Disman::WaylandInterface::outputsChanged (this=0x5555555c0eb0) at backends/wayland/DismanWayland_autogen/EWIEGA46WW/moc_wayland_interface.cpp:185
#12 0x00007ffff33b4273 in Disman::WaylandInterface::initOutput (this=0x5555555c0eb0, output=0x555555613d10) at /home/roman/dev/kde/disman/src/backends/wayland/wayland_interface.cpp:81
#13 0x00007ffff33b4082 in operator() (__closure=0x5555555d7c00) at /home/roman/dev/kde/disman/src/backends/wayland/wayland_interface.cpp:71
#14 0x00007ffff33b4a9d in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, Disman::WaylandInterface::addOutput(Disman::WaylandOutput*)::<lambda()> >::call(struct {...} &, void **) (f=..., arg=0x7fffffffcc20) at /usr/include/qt/QtCore/qobjectdefs_impl.h:146
#15 0x00007ffff33b49ed in QtPrivate::Functor<Disman::WaylandInterface::addOutput(Disman::WaylandOutput*)::<lambda()>, 0>::call<QtPrivate::List<>, void>(struct {...} &, void *, void **) (f=..., arg=0x7fffffffcc20) at /usr/include/qt/QtCore/qobjectdefs_impl.h:256
#16 0x00007ffff33b4908 in QtPrivate::QFunctorSlotObject<Disman::WaylandInterface::addOutput(Disman::WaylandOutput*)::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=1, this_=0x5555555d7bf0, r=0x5555555c0eb0, a=0x7fffffffcc20, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:443
#17 0x00007ffff7570036 in ?? () from /usr/lib/libQt5Core.so.5
#18 0x00007ffff33ad343 in Disman::WaylandOutput::dataReceived (this=0x555555613d10) at backends/wayland/DismanWayland_autogen/EWIEGA46WW/moc_waylandoutput.cpp:154
#19 0x00007ffff29dd68b in operator() (__closure=0x5555555d83c0) at /home/roman/dev/kde/disman/src/backends/wayland/plugins/wlroots-wrapland/wlroots_output.cpp:70
#20 0x00007ffff29df2f7 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, Disman::WlrootsOutput::WlrootsOutput(quint32, Wrapland::Client::WlrOutputHeadV1*, Disman::WlrootsInterface*)::<lambda()> >::call(struct {...} &, void **) (f=..., arg=0x7fffffffcdf0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:146
#21 0x00007ffff29df2c9 in QtPrivate::Functor<Disman::WlrootsOutput::WlrootsOutput(quint32, Wrapland::Client::WlrOutputHeadV1*, Disman::WlrootsInterface*)::<lambda()>, 0>::call<QtPrivate::List<>, void>(struct {...} &, void *, void **) (f=..., arg=0x7fffffffcdf0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:256
#22 0x00007ffff29df298 in QtPrivate::QFunctorSlotObject<Disman::WlrootsOutput::WlrootsOutput(quint32, Wrapland::Client::WlrOutputHeadV1*, Disman::WlrootsInterface*)::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=1, this_=0x5555555d83b0, r=0x555555613d10, a=0x7fffffffcdf0, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:443
#23 0x00007ffff7570036 in ?? () from /usr/lib/libQt5Core.so.5
#24 0x00007ffff28823cd in Wrapland::Client::WlrOutputManagerV1::done (this=0x5555555a3340) at src/client/WraplandClient_autogen/EWIEGA46WW/moc_wlr_output_manager_v1.cpp:172
#25 0x00007ffff291365b in Wrapland::Client::WlrOutputManagerV1::Private::doneCallback (data=0x5555555f3ab0, manager=0x5555555f7d80, serial=459) at /home/roman/dev/kde/wrapland/src/src/client/wlr_output_manager_v1.cpp:77
#26 0x00007ffff7f3fa8d in ?? () from /usr/lib/libffi.so.7
#27 0x00007ffff7f3f01b in ?? () from /usr/lib/libffi.so.7
#28 0x00007ffff7f4e2a2 in wl_closure_invoke (closure=closure@entry=0x7fffe8012420, flags=flags@entry=1, target=<optimized out>, target@entry=0x5555555f7d80, opcode=opcode@entry=1, data=<optimized out>) at ../../src/wayland/src/connection.c:1018
#29 0x00007ffff7f4a96a in dispatch_event (display=display@entry=0x7fffe8004aa0, queue=<optimized out>, queue=<optimized out>) at ../../src/wayland/src/wayland-client.c:1452
#30 0x00007ffff7f4c00c in dispatch_queue (queue=0x5555555a5320, display=0x7fffe8004aa0) at ../../src/wayland/src/wayland-client.c:1598
#31 wl_display_dispatch_queue_pending (display=0x7fffe8004aa0, queue=0x5555555a5320) at ../../src/wayland/src/wayland-client.c:1840
#32 0x00007ffff2892421 in Wrapland::Client::EventQueue::dispatch (this=0x7fffe4004ff0) at /home/roman/dev/kde/wrapland/src/src/client/event_queue.cpp:96
#33 0x00007ffff2892cba in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (Wrapland::Client::EventQueue::*)()>::call(void (Wrapland::Client::EventQueue::*)(), Wrapland::Client::EventQueue*, void**) (f=(void (Wrapland::Client::EventQueue::*)(Wrapland::Client::EventQueue * const)) 0x7ffff289238c <Wrapland::Client::EventQueue::dispatch()>, o=0x7fffe4004ff0, arg=0x7fffe80129e8) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#34 0x00007ffff2892bbd in QtPrivate::FunctionPointer<void (Wrapland::Client::EventQueue::*)()>::call<QtPrivate::List<>, void>(void (Wrapland::Client::EventQueue::*)(), Wrapland::Client::EventQueue*, void**) (f=(void (Wrapland::Client::EventQueue::*)(Wrapland::Client::EventQueue * const)) 0x7ffff289238c <Wrapland::Client::EventQueue::dispatch()>, o=0x7fffe4004ff0, arg=0x7fffe80129e8) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#35 0x00007ffff2892ab3 in QtPrivate::QSlotObject<void (Wrapland::Client::EventQueue::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x5555555a0930, r=0x7fffe4004ff0, a=0x7fffe80129e8, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#36 0x00007ffff75657e2 in QObject::event(QEvent*) () from /usr/lib/libQt5Core.so.5
#37 0x00007ffff7538cda in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#38 0x00007ffff753b7d3 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5
#39 0x00007ffff7592304 in ?? () from /usr/lib/libQt5Core.so.5
#40 0x00007ffff6364bfc in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#41 0x00007ffff63b61f9 in ?? () from /usr/lib/libglib-2.0.so.0
#42 0x00007ffff6363421 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#43 0x00007ffff7591941 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#44 0x00007ffff753765c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#45 0x00007ffff753faf4 in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5
#46 0x0000555555557f2b in main (argc=1, argv=0x7fffffffd8b8) at /home/roman/dev/kde/disman/src/service/main.cpp:49
romangg commented 4 years ago

The issue seems to be that new outputs are not enabled by default and then no "current mode" is sent.

romangg commented 4 years ago

mentioned in commit 88cd734091d42a0d636624ed87151718f932da7f