WayfireWM / wf-shell

A GTK3-based panel for wayfire
https://wayfire.org/
MIT License
137 stars 35 forks source link

widgets crash wf-panel when removing and adding an output #180

Open soreau opened 1 year ago

soreau commented 1 year ago

The first place this is noted is in window-list widget, here is the bt with asan:

=================================================================
==447611==ERROR: AddressSanitizer: heap-use-after-free on address 0x603000a34d78 at pc 0x55c3259f2c3a bp 0x7fff10480d60 sp 0x7fff10480d50
READ of size 8 at 0x603000a34d78 thread T0
    #0 0x55c3259f2c39 in WayfireWindowList::get_default_button_width() ../src/panel/widgets/window-list/window-list.cpp:217
    #1 0x55c3259f45f7 in WayfireWindowList::handle_new_toplevel(zwlr_foreign_toplevel_handle_v1*) ../src/panel/widgets/window-list/window-list.cpp:265
    #2 0x55c3259f0e0d in handle_manager_toplevel ../src/panel/widgets/window-list/window-list.cpp:135
    #3 0x7fd4c25f2e2d  (/lib/x86_64-linux-gnu/libffi.so.8+0x7e2d)
    #4 0x7fd4c25ef492  (/lib/x86_64-linux-gnu/libffi.so.8+0x4492)
    #5 0x7fd4c61fde30 in wl_closure_invoke ../src/connection.c:1025
    #6 0x7fd4c61fa039 in dispatch_event ../src/wayland-client.c:1631
    #7 0x7fd4c61fb9fb in dispatch_queue ../src/wayland-client.c:1777
    #8 0x7fd4c61fb9fb in wl_display_dispatch_queue_pending ../src/wayland-client.c:2019
    #9 0x7fd4c5794547  (/lib/x86_64-linux-gnu/libgdk-3.so.0+0x9b547)
    #10 0x7fd4c572fa98 in gdk_display_get_event (/lib/x86_64-linux-gnu/libgdk-3.so.0+0x36a98)
    #11 0x7fd4c5799995  (/lib/x86_64-linux-gnu/libgdk-3.so.0+0xa0995)
    #12 0x7fd4c441ad3a in g_main_context_dispatch (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x55d3a)
    #13 0x7fd4c4470257  (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0xab257)
    #14 0x7fd4c44183e2 in g_main_context_iteration (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x533e2)
    #15 0x7fd4c4707fb4 in g_application_run (/lib/x86_64-linux-gnu/libgio-2.0.so.0+0xe0fb4)
    #16 0x55c325b53964 in WayfireShellApp::run() ../src/util/wf-shell-app.cpp:177
    #17 0x55c3258b5f79 in WayfirePanelApp::create(int, char**) ../src/panel/panel.cpp:418
    #18 0x55c3258b669d in main ../src/panel/panel.cpp:428
    #19 0x7fd4c2a29d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
    #20 0x7fd4c2a29e3f in __libc_start_main_impl ../csu/libc-start.c:392
    #21 0x55c3258b49f4 in _start (/opt/wayfire/bin/wf-panel+0x69b9f4)

0x603000a34d78 is located 8 bytes inside of 24-byte region [0x603000a34d70,0x603000a34d88)
freed by thread T0 here:
    #0 0x7fd4c58b724f in operator delete(void*, unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:172
    #1 0x55c325b5e6b7 in std::default_delete<WayfireOutput>::operator()(WayfireOutput*) const /usr/include/c++/11/bits/unique_ptr.h:85
    #2 0x55c325b5bb0c in std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >::~unique_ptr() /usr/include/c++/11/bits/unique_ptr.h:361
    #3 0x55c325b66f43 in void std::_Destroy<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > >(std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*) /usr/include/c++/11/bits/stl_construct.h:151
    #4 0x55c325b64bca in void std::_Destroy_aux<false>::__destroy<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*>(std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*, std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*) /usr/include/c++/11/bits/stl_construct.h:163
    #5 0x55c325b62af0 in void std::_Destroy<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*>(std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*, std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*) /usr/include/c++/11/bits/stl_construct.h:196
    #6 0x55c325b5fe3d in void std::_Destroy<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*, std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > >(std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*, std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*, std::allocator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > >&) /usr/include/c++/11/bits/alloc_traits.h:848
    #7 0x55c325b628c0 in std::vector<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >, std::allocator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > > >::_M_erase_at_end(std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*) /usr/include/c++/11/bits/stl_vector.h:1796
    #8 0x55c325b5faea in std::vector<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >, std::allocator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > > >::_M_erase(__gnu_cxx::__normal_iterator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*, std::vector<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >, std::allocator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > > > >, __gnu_cxx::__normal_iterator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >*, std::vector<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >, std::allocator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > > > >) /usr/include/c++/11/bits/vector.tcc:191
    #9 0x55c325b5c6cf in std::vector<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >, std::allocator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > > >::erase(__gnu_cxx::__normal_iterator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > const*, std::vector<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >, std::allocator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > > > >, __gnu_cxx::__normal_iterator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > const*, std::vector<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> >, std::allocator<std::unique_ptr<WayfireOutput, std::default_delete<WayfireOutput> > > > >) /usr/include/c++/11/bits/stl_vector.h:1461
    #10 0x55c325b51a5c in WayfireShellApp::rem_output(Glib::RefPtr<Gdk::Monitor>) ../src/util/wf-shell-app.cpp:145
    #11 0x55c325b4ee67 in operator() ../src/util/wf-shell-app.cpp:120
    #12 0x55c325b5873e in operator()<const Glib::RefPtr<Gdk::Monitor>&> /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:89
    #13 0x55c325b5705c in call_it /usr/include/sigc++-2.0/sigc++/functors/slot.h:170
    #14 0x7fd4c6305b43  (/lib/x86_64-linux-gnu/libgdkmm-3.0.so.1+0x35b43)

previously allocated by thread T0 here:
    #0 0x7fd4c58b61e7 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99
    #1 0x55c325b5b8ec in std::_MakeUniq<WayfireOutput>::__single_object std::make_unique<WayfireOutput, Glib::RefPtr<Gdk::Monitor>&, zwf_shell_manager_v2*&>(Glib::RefPtr<Gdk::Monitor>&, zwf_shell_manager_v2*&) /usr/include/c++/11/bits/unique_ptr.h:962
    #2 0x55c325b50ec5 in WayfireShellApp::add_output(Glib::RefPtr<Gdk::Monitor>) ../src/util/wf-shell-app.cpp:133
    #3 0x55c325b4ea4f in operator() ../src/util/wf-shell-app.cpp:118
    #4 0x55c325b580b6 in operator()<const Glib::RefPtr<Gdk::Monitor>&> /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:89
    #5 0x55c325b5699c in call_it /usr/include/sigc++-2.0/sigc++/functors/slot.h:170
    #6 0x7fd4c6305b43  (/lib/x86_64-linux-gnu/libgdkmm-3.0.so.1+0x35b43)

SUMMARY: AddressSanitizer: heap-use-after-free ../src/panel/widgets/window-list/window-list.cpp:217 in WayfireWindowList::get_default_button_width()
Shadow bytes around the buggy address:
  0x0c068013e950: fd fa fa fa fd fd fd fa fa fa fd fd fd fd fa fa
  0x0c068013e960: fd fd fd fd fa fa fd fd fd fd fa fa fd fd fd fd
  0x0c068013e970: fa fa fd fd fd fd fa fa fd fd fd fd fa fa fd fd
  0x0c068013e980: fd fd fa fa fd fd fd fd fa fa fd fd fd fd fa fa
  0x0c068013e990: fd fd fd fd fa fa fd fd fd fd fa fa fd fd fd fd
=>0x0c068013e9a0: fa fa fd fd fd fd fa fa fd fd fd fd fa fa fd[fd]
  0x0c068013e9b0: fd fa fa fa fd fd fd fd fa fa fd fd fd fd fa fa
  0x0c068013e9c0: fd fd fd fd fa fa fd fd fd fd fa fa fd fd fd fa
  0x0c068013e9d0: fa fa fd fd fd fd fa fa fd fd fd fd fa fa 00 00
  0x0c068013e9e0: 00 00 fa fa fd fd fd fd fa fa fd fd fd fd fa fa
  0x0c068013e9f0: fd fd fd fd fa fa fd fd fd fd fa fa fd fd fd fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==447611==ABORTING

To repro:

run wayland nested backend with WLR_WL_OUTPUTS=2 wayfire -d -c /tmp/wayfire.ini where wayfire.ini has ipc and stipc plugins enabled. Then clone https://github.com/ammen99/wayfire-tests and cd into wayfire-tests/wfpytest/ and run this script with python3:

import wfipclib
import time
wi = wfipclib.WayfireIPCClient("/tmp/wayfire-wayland-2.socket")
wi.destroy_wayland_output("WL-2")
time.sleep(1)
wi.create_wayland_output()
wi.destroy_wayland_output("WL-3")
time.sleep(1)
wi.create_wayland_output()

Expected: wf-panel does not crash

Actual: wf-panel crashes with above backtrace

kode54 commented 11 months ago

I produced a better trace already shared on IRC, when running it on a bare metal instance and detaching and reattaching a monitor.

#0  g_log_structured_array
    (log_level=log_level@entry=G_LOG_LEVEL_ERROR, fields=fields@entry=0x7ffc98317f30, n_fields=4) at ../glib/glib/gmessages.c:556
#1  0x00007fa37761f553 in g_log_default_handler
    (log_domain=log_domain@entry=0x7fa3776d8161 "GLib", log_level=log_level@entry=6, message=message@entry=0x559ca0cd1d80 "Creating pipes for GWakeup: Too many open files", unused_data=unused_data@entry=0x0)
    at ../glib/glib/gmessages.c:3284
#2  0x00007fa377620405 in g_logv
    (log_domain=0x7fa3776d8161 "GLib", log_level=G_LOG_LEVEL_ERROR, format=<optimized out>, args=args@entry=0x7ffc98318080) at ../glib/glib/gmessages.c:1392
#3  0x00007fa3776206d4 in g_log
    (log_domain=<optimized out>, log_level=<optimized out>, format=<optimized out>) at ../glib/glib/gmessages.c:1461
#4  0x00007fa37766f2e3 in g_wakeup_new () at ../glib/glib/gwakeup.c:164
#5  0x00007fa377615401 in g_main_context_new_with_flags
    (flags=flags@entry=G_MAIN_CONTEXT_FLAGS_NONE) at ../glib/glib/gmain.c:786
#6  0x00007fa37761549c in g_main_context_new () at ../glib/glib/gmain.c:729
#7  0x00007fa377a45d0f in initable_init
    (initable=0x559ca0a0be10, cancellable=0x0, error=0x7ffc983181e0)
    at ../glib/gio/gdbusproxy.c:1902
#8  0x00007fa378542397 in Gio::Initable::init() (this=<optimized out>)
    at gio/giomm/initable.cc:194
#9  0x00007fa37852dfa1 in Gio::DBus::Proxy::Proxy(Glib::RefPtr<Gio::DBus::Connection> const&, Glib::ustring const&, Glib::ustring const&, Glib::ustring const&, Glib::RefPtr<Gio::DBus::InterfaceInfo> const&, Gio::DBus::ProxyFlags)
    (this=this@entry=0x559ca0ab1130, connection=..., name=..., object_path=..., interface_name=..., info=..., flags=Gio::DBus::PROXY_FLAGS_NONE, this=<optimized out>, connection=<optimized out>, name=<optimized out>, object_path=<optimized out>, interface_name=<optimized out>, info=<optimized out>, flags=<optimized out>) at gio/giomm/dbusproxy.cc:83
#10 0x00007fa37852e098 in Gio::DBus::Proxy::create_sync(Glib::RefPtr<Gio::DBus::Connection> const&, Glib::ustring const&, Glib::ustring const&, Glib::ustring const&, Glib::RefPtr<Gio::DBus::InterfaceInfo> const&, Gio::DBus::ProxyFlags)
    (connection=..., name=..., object_path=..., interface_name=..., info=..., flags=Gio::DBus::PROXY_FLAGS_NONE) at gio/giomm/dbusproxy.cc:158
#11 0x0000559c9f191629 in WayfireBatteryInfo::setup_dbus()
    (this=0x559ca249d5b0) at ../wf-shell-git/src/panel/widgets/battery.cpp:193
#12 WayfireBatteryInfo::init(Gtk::HBox*)
    (this=0x559ca249d5b0, container=0x559ca0cc38e8)
    at ../wf-shell-git/src/panel/widgets/battery.cpp:229
#13 0x0000559c9f187584 in WayfirePanel::impl::reload_widgets(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> >, std::allocator<std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> > > >&, Gtk::HBox&) (this=<optimized out>, list=Python Exception <class 'gdb.error'>: value has been optimized out

   , container=<optimized out>, box=<optimized out>) at ../wf-shell-git/src/panel/panel.cpp:275
#14 0x0000559c9f18b1c6 in WayfirePanel::impl::init_widgets()
    (this=0x559ca0cc37f0) at ../wf-shell-git/src/panel/panel.cpp:306
#15 WayfirePanel::impl::create_window() (this=0x559ca0cc37f0)
    at ../wf-shell-git/src/panel/panel.cpp:133
#16 WayfirePanel::impl::impl(WayfireOutput*)
    (this=0x559ca0cc37f0, output=<optimized out>, this=<optimized out>, output=<optimized out>) at ../wf-shell-git/src/panel/panel.cpp:313
#17 0x0000559c9f18b8bf in WayfirePanel::WayfirePanel(WayfireOutput*)
    (output=0x559ca0bc6f60, this=0x559ca08ab4c0)
    at ../wf-shell-git/src/panel/panel.cpp:345
#18 WayfirePanelApp::handle_new_output(WayfireOutput*)
    (this=0x559ca071d070, output=0x559ca0bc6f60)
    at ../wf-shell-git/src/panel/panel.cpp:379
#19 0x0000559c9f1b50db in operator()
    (__closure=<optimized out>, monitor=<optimized out>)
    at ../wf-shell-git/src/util/wf-shell-app.cpp:118
#20 sigc::adaptor_functor<WayfireShellApp::on_activate()::<lambda(const GMonitor&)> >::operator()<const Glib::RefPtr<Gdk::Monitor>&>
    (_A_arg1=<optimized out>, this=<optimized out>)
    at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:89
#21 sigc::internal::slot_call1<WayfireShellApp::on_activate()::<lambda(const GMonitor&)>, void, const Glib::RefPtr<Gdk::Monitor>&>::call_it(sigc::internal::slot_rep *, sigc::type_trait_take_t) (rep=<optimized out>, a_1=<optimized out>)
    at /usr/include/sigc++-2.0/sigc++/functors/slot.h:170
#22 0x00007fa378b0aeb7 in sigc::slot1<void, bool>::operator()(bool const&) const (_A_a1=@0x7ffc98318b70: 112, this=0x559ca089b418)
    at /usr/include/sigc++-2.0/sigc++/functors/slot.h:665
#23 (anonymous namespace)::Display_signal_monitor_added_callback(GdkDisplay*, GdkMonitor*, void*)
    (self=<optimized out>, p0=0x559ca144e7f0, data=0x559ca089b410)
    at gdk/gdkmm/display.cc:189
Python Exception <class 'gdb.error'>: value has been optimized out

Seems to be crashing with an excess of file handles, and seems to only happen if the battery widget is in the panel somewhere.

kode54 commented 11 months ago

Hmm, a different crash this time:

Core was generated by `wf-panel'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  emission_find (instance=0x5570544980e0, detail=1009, signal_id=1)
    at ../glib/gobject/gsignal.c:895
Downloading source file /usr/src/debug/glib2/build/../glib/gobject/gsignal.c
895         if (emission->instance == instance &&
[Current thread is 1 (Thread 0x7fae0bc8f9c0 (LWP 5557))]
(gdb) bt
#0  emission_find (instance=0x5570544980e0, detail=1009, signal_id=1)
    at ../glib/gobject/gsignal.c:895
#1  signal_emit_unlocked_R.isra.0
    (node=node@entry=0x7fff0a4360f0, detail=detail@entry=1009, instance=instance@entry=0x5570544980e0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fff0a436000)
    at ../glib/gobject/gsignal.c:3776
#2  0x00007fae0dc36a42 in signal_emit_valist_unlocked
    (instance=instance@entry=0x5570544980e0, signal_id=signal_id@entry=1, detail=detail@entry=1009, var_args=var_args@entry=0x7fff0a436250)
    at ../glib/gobject/gsignal.c:3612
#3  0x00007fae0dc36c77 in g_signal_emit_valist
    (instance=0x5570544980e0, signal_id=1, detail=1009, var_args=var_args@entry=0x7fff0a436250) at ../glib/gobject/gsignal.c:3355
#4  0x00007fae0dc36d34 in g_signal_emit
    (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../glib/gobject/gsignal.c:3675
#5  0x00007fae0dc22636 in g_object_dispatch_properties_changed
    (object=0x5570544980e0 [gtkmm__GtkPopover], n_pspecs=<optimized out>, pspecs=<optimized out>) at ../glib/gobject/gobject.c:1427
#6  0x00007fae0dc25ab3 in g_object_notify_by_spec_internal
    (pspec=<optimized out>, object=0x5570544980e0 [gtkmm__GtkPopover])
    at ../glib/gobject/gobject.c:1551
--Type <RET> for more, q to quit, c to continue without paging--c
#7  g_object_notify_by_pspec
    (object=object@entry=0x5570544980e0 [gtkmm__GtkPopover], pspec=<optimized out>) at ../glib/gobject/gobject.c:1657
#8  0x00007fae0e34d7ed in _gtk_widget_scale_changed
    (widget=0x5570544980e0 [gtkmm__GtkPopover]) at ../gtk/gtk/gtkwidget.c:10941
#9  _gtk_widget_scale_changed (widget=0x5570544980e0 [gtkmm__GtkPopover])
    at ../gtk/gtk/gtkwidget.c:10930
#10 0x00007fae0e35f18b in gtk_window_forall
    (container=0x557054107240 [gtkmm__GtkWindow], include_internals=1, callback=0x7fae0e34d780 <_gtk_widget_scale_changed>, callback_data=0x0)
    at ../gtk/gtk/gtkwindow.c:8626
#11 0x00007fae0e3635c8 in check_scale_changed
    (window=0x557054107240 [gtkmm__GtkWindow]) at ../gtk/gtk/gtkwindow.c:6800
#12 gtk_window_configure_event
    (widget=0x557054107240 [gtkmm__GtkWindow], event=0x557055047de0)
    at ../gtk/gtk/gtkwindow.c:7970
#13 0x00007fae0ed17cf9 in Gtk::Widget::on_configure_event(_GdkEventConfigure*)
    (this=0x5570542bc9d0, configure_event=0x557055047de0)
    at gtk/gtkmm/widget.cc:7976
#14 0x00007fae0ed10cbb in Gtk::Widget_Class::configure_event_callback(_GtkWidget*, _GdkEventConfigure*)
    (self=0x557054107240 [gtkmm__GtkWindow], p0=0x557055047de0)
    at gtk/gtkmm/widget.cc:4634
#15 0x00007fae0e08c34d in _gtk_marshal_BOOLEAN__BOXED
    (closure=0x557054087030, return_value=0x7fff0a4365d0, param_values=0x7fff0a436660, marshal_data=<optimized out>, invocation_hint=<optimized out>, n_param_values=<optimized out>) at gtk/gtkmarshalers.c:84
#16 0x00007fae0dc176c0 in g_closure_invoke
    (closure=0x557054087030, return_value=0x7fff0a4365d0, n_param_values=2, param_values=0x7fff0a436660, invocation_hint=0x7fff0a4365b0)
    at ../glib/gobject/gclosure.c:832
#17 0x00007fae0dc460ea in signal_emit_unlocked_R.isra.0
    (node=node@entry=0x7fff0a436750, detail=detail@entry=0, instance=instance@entry=0x557054107240, emission_return=emission_return@entry=0x7fff0a4367d0, instance_and_params=instance_and_params@entry=0x7fff0a436660)
    at ../glib/gobject/gsignal.c:4020
#18 0x00007fae0dc36335 in signal_emit_valist_unlocked
    (instance=instance@entry=0x557054107240, signal_id=signal_id@entry=105, detail=detail@entry=0, var_args=var_args@entry=0x7fff0a4368b0)
    at ../glib/gobject/gsignal.c:3625
#19 0x00007fae0dc36c77 in g_signal_emit_valist
    (instance=0x557054107240, signal_id=105, detail=0, var_args=var_args@entry=0x7fff0a4368b0) at ../glib/gobject/gsignal.c:3355
#20 0x00007fae0dc36d34 in g_signal_emit
    (instance=instance@entry=0x557054107240, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3675
#21 0x00007fae0e3546e5 in gtk_widget_event_internal.part.0.lto_priv.0
    (widget=0x557054107240 [gtkmm__GtkWindow], event=0x557055047de0)
    at ../gtk/gtk/gtkwidget.c:7812
#22 0x00007fae0e1ef85c in gtk_main_do_event (event=0x557055047de0)
    at ../gtk/gtk/gtkmain.c:1861
#23 gtk_main_do_event (event=<optimized out>) at ../gtk/gtk/gtkmain.c:1691
#24 0x00007fae0eeefb87 in _gdk_event_emit (event=0x557055047de0)
    at ../gtk/gdk/gdkevents.c:73
#25 _gdk_event_emit (event=0x557055047de0) at ../gtk/gdk/gdkevents.c:67
#26 0x00007fae0ef27848 in gdk_event_source_dispatch
    (base=<optimized out>, callback=<optimized out>, data=<optimized out>)
    at ../gtk/gdk/wayland/gdkeventsource.c:124
#27 0x00007fae0db10f19 in g_main_dispatch (context=0x55705402c3c0)
    at ../glib/glib/gmain.c:3476
#28 0x00007fae0db6f2b7 in g_main_context_dispatch_unlocked
    (context=0x55705402c3c0) at ../glib/glib/gmain.c:4284
#29 g_main_context_iterate_unlocked.isra.0
    (context=context@entry=0x55705402c3c0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4349
#30 0x00007fae0db0f112 in g_main_context_iteration
    (context=context@entry=0x55705402c3c0, may_block=may_block@entry=1)
    at ../glib/glib/gmain.c:4414
#31 0x00007fae0df06af6 in g_application_run
    (application=0x55705401a1c0 [gtkmm__GtkApplication], argc=<optimized out>, argv=0x7fff0a436dc8) at ../glib/gio/gapplication.c:2577
#32 0x000055705330145c in WayfirePanelApp::create(int, char**)
    (argv=0x7fff0a436dc8, argc=1) at ../wf-shell-git/src/panel/panel.cpp:418
#33 main(int, char**) (argc=1, argv=0x7fff0a436dc8)
    at ../wf-shell-git/src/panel/panel.cpp:428
kode54 commented 11 months ago

And here's a full log output of a session that ended with a SIGTRAP due to file handle exhaustion:

II 01-10-23 00:51:23.665 - [subprojects/wf-config/src/file.cpp:576] Reading XML configuration options from directory /usr/share/wayfire/metadata/wf-shell
II 01-10-23 00:51:23.665 - [subprojects/wf-config/src/file.cpp:590] Reading XML configuration options from file /usr/share/wayfire/metadata/wf-shell/background.xml
II 01-10-23 00:51:23.666 - [subprojects/wf-config/src/file.cpp:590] Reading XML configuration options from file /usr/share/wayfire/metadata/wf-shell/dock.xml
II 01-10-23 00:51:23.666 - [subprojects/wf-config/src/file.cpp:590] Reading XML configuration options from file /usr/share/wayfire/metadata/wf-shell/panel.xml
Failed to load icon "notifications"
Failed to load icon "notifications"
target button 1568
set width 192
target button 1515
set width 189
target button 1499
set width 187
target button 1499
set width 187
Failed to load icon "notifications"
Failed to load icon "notifications"
target button 1499
set width 192
target button 1499
set width 192
target button 1499
set width 192
target button 1344
set width 192
target button 187
set width 187
target button 1496
set width 192

(wf-panel:76194): GLib-CRITICAL **: 00:59:54.335: g_variant_type_checked_: assertion 'g_variant_type_string_is_valid (type_string)' failed

(wf-panel:76194): GLib-CRITICAL **: 00:59:54.335: g_variant_type_copy: assertion 'g_variant_type_check (type)' failed

(wf-panel:76194): GLib-CRITICAL **: 00:59:54.335: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (supertype)' failed
Error at void Daemon::Notifydbus_method(const Glib::ustring&, const Glib::VariantContainerBase&, const Glib::RefPtr<Gio::DBus::MethodInvocation>&): Cannot create pixbuf from variant.
Failed to load icon "notifications-disabled"
target button 1344
set width 192
target button 187
set width 187
target button 1496
set width 192

(wf-panel:76194): GLib-CRITICAL **: 09:36:53.010: g_variant_type_checked_: assertion 'g_variant_type_string_is_valid (type_string)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:36:53.010: g_variant_type_copy: assertion 'g_variant_type_check (type)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:36:53.010: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (supertype)' failed
Error at void Daemon::Notifydbus_method(const Glib::ustring&, const Glib::VariantContainerBase&, const Glib::RefPtr<Gio::DBus::MethodInvocation>&): Cannot create pixbuf from variant.

(wf-panel:76194): GLib-CRITICAL **: 09:37:18.103: g_variant_type_checked_: assertion 'g_variant_type_string_is_valid (type_string)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:37:18.103: g_variant_type_copy: assertion 'g_variant_type_check (type)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:37:18.103: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (supertype)' failed
Error at void Daemon::Notifydbus_method(const Glib::ustring&, const Glib::VariantContainerBase&, const Glib::RefPtr<Gio::DBus::MethodInvocation>&): Cannot create pixbuf from variant.

(wf-panel:76194): GLib-CRITICAL **: 09:37:43.208: g_variant_type_checked_: assertion 'g_variant_type_string_is_valid (type_string)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:37:43.208: g_variant_type_copy: assertion 'g_variant_type_check (type)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:37:43.208: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (supertype)' failed
Error at void Daemon::Notifydbus_method(const Glib::ustring&, const Glib::VariantContainerBase&, const Glib::RefPtr<Gio::DBus::MethodInvocation>&): Cannot create pixbuf from variant.

(wf-panel:76194): GLib-CRITICAL **: 09:38:08.303: g_variant_type_checked_: assertion 'g_variant_type_string_is_valid (type_string)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:38:08.303: g_variant_type_copy: assertion 'g_variant_type_check (type)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:38:08.303: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (supertype)' failed
Error at void Daemon::Notifydbus_method(const Glib::ustring&, const Glib::VariantContainerBase&, const Glib::RefPtr<Gio::DBus::MethodInvocation>&): Cannot create pixbuf from variant.

(wf-panel:76194): GLib-CRITICAL **: 09:38:33.423: g_variant_type_checked_: assertion 'g_variant_type_string_is_valid (type_string)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:38:33.423: g_variant_type_copy: assertion 'g_variant_type_check (type)' failed

(wf-panel:76194): GLib-CRITICAL **: 09:38:33.423: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (supertype)' failed
Error at void Daemon::Notifydbus_method(const Glib::ustring&, const Glib::VariantContainerBase&, const Glib::RefPtr<Gio::DBus::MethodInvocation>&): Cannot create pixbuf from variant.

(wf-panel:76194): GLib-CRITICAL **: 10:08:44.753: g_variant_type_checked_: assertion 'g_variant_type_string_is_valid (type_string)' failed

(wf-panel:76194): GLib-CRITICAL **: 10:08:44.753: g_variant_type_copy: assertion 'g_variant_type_check (type)' failed

(wf-panel:76194): GLib-CRITICAL **: 10:08:44.753: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (supertype)' failed
Error at void Daemon::Notifydbus_method(const Glib::ustring&, const Glib::VariantContainerBase&, const Glib::RefPtr<Gio::DBus::MethodInvocation>&): Cannot create pixbuf from variant.

(wf-panel:76194): GLib-CRITICAL **: 12:28:17.260: g_variant_type_checked_: assertion 'g_variant_type_string_is_valid (type_string)' failed

(wf-panel:76194): GLib-CRITICAL **: 12:28:17.260: g_variant_type_copy: assertion 'g_variant_type_check (type)' failed

(wf-panel:76194): GLib-CRITICAL **: 12:28:17.260: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (supertype)' failed
Error at void Daemon::Notifydbus_method(const Glib::ustring&, const Glib::VariantContainerBase&, const Glib::RefPtr<Gio::DBus::MethodInvocation>&): Cannot create pixbuf from variant.

(wf-panel:76194): GLib-CRITICAL **: 13:06:27.773: g_variant_type_checked_: assertion 'g_variant_type_string_is_valid (type_string)' failed

(wf-panel:76194): GLib-CRITICAL **: 13:06:27.773: g_variant_type_copy: assertion 'g_variant_type_check (type)' failed

(wf-panel:76194): GLib-CRITICAL **: 13:06:27.773: g_variant_type_is_subtype_of: assertion 'g_variant_type_check (supertype)' failed
Error at void Daemon::Notifydbus_method(const Glib::ustring&, const Glib::VariantContainerBase&, const Glib::RefPtr<Gio::DBus::MethodInvocation>&): Cannot create pixbuf from variant.

(wf-panel:76194): GLib-ERROR **: 13:54:58.517: Creating pipes for GWakeup: Too many open files
fish: Job 1, 'wf-panel' terminated by signal SIGTRAP (Trace or breakpoint trap)
mrsteve0924 commented 8 months ago

i get the same panel crash when using a KVM switch. switching back to wayfire PC, panel will crash when using the windows-list widget. doesnt crash when windows-list is disabled.

Also, sometimes when switching back to wayfire, it ends up on a different workspace from the one I was using before the switch. I do have preserve-ouput enabled.

EDIT: well now I am running a script that monitors if the panel exits and then just restarts it again. sufficient for now.

mrsteve0924 commented 7 months ago

well its been 3 days since i switched to nvidia proprietary drivers and my panel hasn't crashed once since. previously i was using the nouveau driver with my nvidia 1660ti and then was using the intel igpu for a time. panel would crash a lot. it didnt occur to me it could be the gpu driver causing the issue?? will keep fingers crossed for a few more days.

Hmmm. wait a sec, a few days ago i did install the windows-list-height branch. maybe that fixed something???

EDIT: Haven't had panel crash with the nvidia driver since Feb 6. Switched back to nouveau driver on Feb 21 and panel is crashing again.

kode54 commented 4 months ago

Here it is crashing on the notification widget, I think:

#0  g_log_structured_array (log_level=log_level@entry=G_LOG_LEVEL_ERROR,
    fields=fields@entry=0x7ffc9b02b860, n_fields=4)
    at ../glib/glib/gmessages.c:426
Downloading source file /usr/src/debug/glib2/build/../glib/glib/gmessages.c
426         G_BREAKPOINT ();
[Current thread is 1 (Thread 0x72877df57e40 (LWP 2790969))]
(gdb) bt
#0  g_log_structured_array
    (log_level=log_level@entry=G_LOG_LEVEL_ERROR, fields=fields@entry=0x7ffc9b02b860, n_fields=4) at ../glib/glib/gmessages.c:426
#1  0x0000728780b13dd7 in g_log_default_handler
    (log_domain=log_domain@entry=0x728780bd22fc "GLib", log_level=log_level@entry=6, message=message@entry=0x5b2e9ab7ba50 "Creating pipes for GWakeup: Too many open files", unused_data=unused_data@entry=0x0)
    at ../glib/glib/gmessages.c:3357
#2  0x0000728780b1405c in g_logv
    (log_domain=0x728780bd22fc "GLib", log_level=G_LOG_LEVEL_ERROR, format=<optimized out>, args=args@entry=0x7ffc9b02b9b0) at ../glib/glib/gmessages.c:1246
#3  0x0000728780b143d4 in g_log
    (log_domain=<optimized out>, log_level=<optimized out>, format=<optimized out>) at ../glib/glib/gmessages.c:1315
#4  0x0000728780b68993 in g_wakeup_new () at ../glib/glib/gwakeup.c:162
#5  0x0000728780b0c13c in g_main_context_new_with_flags
    (flags=flags@entry=G_MAIN_CONTEXT_FLAGS_NONE) at ../glib/glib/gmain.c:658
#6  0x0000728780b0c1dc in g_main_context_new () at ../glib/glib/gmain.c:603
#7  0x0000728780776f5c in g_dbus_connection_send_message_with_reply_sync
    (connection=0x5b2dd9ceb220 [GDBusConnection], message=0x5b2e9ab705c0 [GDBusMessage], flags=G_DBUS_SEND_MESSAGE_FLAGS_NONE, timeout_msec=-1, out_serial=0x0, cancellable=0x0, error=0x7ffc9b02bba0) at ../glib/gio/gdbusconnection.c:2290
--Type <RET> for more, q to quit, c to continue without paging--c
#8  0x0000728780783e31 in g_dbus_connection_call_sync_internal
    (connection=0x5b2dd9ceb220 [GDBusConnection], bus_name=bus_name@entry=0x7287807e1295 "org.freedesktop.DBus", object_path=object_path@entry=0x7287807e12aa "/org/freedesktop/DBus", interface_name=interface_name@entry=0x7287807e1295 "org.freedesktop.DBus", method_name=method_name@entry=0x7287807e1c53 "ReleaseName", parameters=0x5b2ea7ace840, reply_type=0x7287807e11eb, flags=G_DBUS_CALL_FLAGS_NONE, timeout_msec=-1, fd_list=0x0, out_fd_list=0x0, cancellable=0x0, error=0x7ffc9b02bc80) at ../glib/gio/gdbusconnection.c:6568
#9  0x0000728780784206 in g_dbus_connection_call_sync
    (connection=<optimized out>, bus_name=bus_name@entry=0x7287807e1295 "org.freedesktop.DBus", object_path=object_path@entry=0x7287807e12aa "/org/freedesktop/DBus", interface_name=interface_name@entry=0x7287807e1295 "org.freedesktop.DBus", method_name=method_name@entry=0x7287807e1c53 "ReleaseName", parameters=<optimized out>, reply_type=0x7287807e11eb, flags=G_DBUS_CALL_FLAGS_NONE, timeout_msec=-1, cancellable=0x0, error=0x7ffc9b02bc80) at ../glib/gio/gdbusconnection.c:6798
#10 0x0000728780789184 in g_bus_unown_name (owner_id=5)
    at ../glib/gio/gdbusnameowning.c:938
#11 g_bus_unown_name (owner_id=5) at ../glib/gio/gdbusnameowning.c:897
#12 0x00005b2dc728d0ef in StatusNotifierHost::~StatusNotifierHost
    (this=0x5b2ddb8f9138, this=<optimized out>)
    at ../wf-shell-git/src/panel/widgets/tray/host.cpp:65
#13 WayfireStatusNotifier::~WayfireStatusNotifier
    (this=0x5b2ddb8f9110, this=<optimized out>)
    at ../wf-shell-git/src/panel/widgets/tray/tray.hpp:9
#14 WayfireStatusNotifier::~WayfireStatusNotifier
    (this=0x5b2ddb8f9110, this=<optimized out>)
    at ../wf-shell-git/src/panel/widgets/tray/tray.hpp:9
#15 0x00005b2dc7266d32 in std::default_delete<WayfireWidget>::operator()
    (this=<optimized out>, __ptr=<optimized out>)
    at /usr/include/c++/14.1.1/bits/unique_ptr.h:87
#16 std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> >::~unique_ptr (this=0x5b2e9aa5fb60, this=<optimized out>)
    at /usr/include/c++/14.1.1/bits/unique_ptr.h:398
#17 std::_Destroy<std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> > > (__pointer=0x5b2e9aa5fb60)
    at /usr/include/c++/14.1.1/bits/stl_construct.h:151
#18 std::_Destroy_aux<false>::__destroy<std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> >*> (__first=0x5b2e9aa5fb60, __last=0x5b2e9aa5fb88)
    at /usr/include/c++/14.1.1/bits/stl_construct.h:163
#19 std::_Destroy<std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> >*> (__first=<optimized out>, __last=0x5b2e9aa5fb88)
    at /usr/include/c++/14.1.1/bits/stl_construct.h:196
#20 std::_Destroy<std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> >*, std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> > >
    (__first=<optimized out>, __last=0x5b2e9aa5fb88)
    at /usr/include/c++/14.1.1/bits/alloc_traits.h:944
#21 std::vector<std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> >, std::allocator<std::unique_ptr<WayfireWidget, std::default_delete<WayfireWidget> > > >::~vector (this=0x5b2dd9dc4648, this=<optimized out>)
    at /usr/include/c++/14.1.1/bits/stl_vector.h:735
#22 WayfirePanel::impl::~impl (this=0x5b2dd9dc44d0, this=<optimized out>)
    at ../wf-shell-git/src/panel/panel.cpp:36
#23 std::default_delete<WayfirePanel::impl>::operator()
    (this=<optimized out>, __ptr=0x5b2dd9dc44d0)
    at /usr/include/c++/14.1.1/bits/unique_ptr.h:93
#24 std::default_delete<WayfirePanel::impl>::operator()
    (this=<optimized out>, __ptr=0x5b2dd9dc44d0)
    at /usr/include/c++/14.1.1/bits/unique_ptr.h:87
#25 std::unique_ptr<WayfirePanel::impl, std::default_delete<WayfirePanel::impl> >::~unique_ptr (this=0x5b2e10921f00, this=<optimized out>)
    at /usr/include/c++/14.1.1/bits/unique_ptr.h:398
#26 WayfirePanel::~WayfirePanel (this=0x5b2e10921f00, this=<optimized out>)
    at ../wf-shell-git/src/panel/panel.hpp:11
#27 std::default_delete<WayfirePanel>::operator()
    (this=<optimized out>, __ptr=0x5b2e10921f00)
    at /usr/include/c++/14.1.1/bits/unique_ptr.h:93
#28 std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> >::~unique_ptr (this=0x5b2e9aa77868, this=<optimized out>)
    at /usr/include/c++/14.1.1/bits/unique_ptr.h:398
#29 std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > >::~pair (this=0x5b2e9aa77860, this=<optimized out>)
    at /usr/include/c++/14.1.1/bits/stl_pair.h:284
#30 std::__new_allocator<std::_Rb_tree_node<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > >::destroy<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > (this=0x5b2dd9de0fc0, __p=0x5b2e9aa77860)
    at /usr/include/c++/14.1.1/bits/new_allocator.h:198
#31 std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > > >::destroy<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > (__a=..., __p=0x5b2e9aa77860)
    at /usr/include/c++/14.1.1/bits/alloc_traits.h:554
#32 std::_Rb_tree<WayfireOutput*, std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > >, std::_Select1st<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > >, std::less<WayfireOutput*>, std::allocator<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > >::_M_destroy_node (this=0x5b2dd9de0fc0, __p=0x5b2e9aa77840)
    at /usr/include/c++/14.1.1/bits/stl_tree.h:621
#33 std::_Rb_tree<WayfireOutput*, std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > >, std::_Select1st<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > >, std::less<WayfireOutput*>, std::allocator<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > >::_M_drop_node (this=0x5b2dd9de0fc0, __p=0x5b2e9aa77840)
    at /usr/include/c++/14.1.1/bits/stl_tree.h:629
#34 std::_Rb_tree<WayfireOutput*, std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > >, std::_Select1st<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > >, std::less<WayfireOutput*>, std::allocator<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > >::_M_erase_aux (this=0x5b2dd9de0fc0, __position=Python Exception <class 'gdb.error'>: value has been optimized out
)
    at /usr/include/c++/14.1.1/bits/stl_tree.h:2492
#35 std::_Rb_tree<WayfireOutput*, std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > >, std::_Select1st<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > >, std::less<WayfireOutput*>, std::allocator<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > >::_M_erase_aux (this=0x5b2dd9de0fc0, __first={...}, __last={...})
    at /usr/include/c++/14.1.1/bits/stl_tree.h:2506
#36 std::_Rb_tree<WayfireOutput*, std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > >, std::_Select1st<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > >, std::less<WayfireOutput*>, std::allocator<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > >::erase (this=0x5b2dd9de0fc0, __x=<synthetic pointer>: <optimized out>)
    at /usr/include/c++/14.1.1/bits/stl_tree.h:2517
#37 std::map<WayfireOutput*, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> >, std::less<WayfireOutput*>, std::allocator<std::pair<WayfireOutput* const, std::unique_ptr<WayfirePanel, std::default_delete<WayfirePanel> > > > >::erase (this=0x5b2dd9de0fc0, __x=<synthetic pointer>: <optimized out>)
    at /usr/include/c++/14.1.1/bits/stl_map.h:1118
#38 WayfirePanelApp::handle_output_removed
    (this=<optimized out>, output=<optimized out>)
    at ../wf-shell-git/src/panel/panel.cpp:452
#39 0x00005b2dc729123a in WayfireShellApp::rem_output
    (this=0x5b2dd9c75d50, monitor=...)
    at ../wf-shell-git/src/util/wf-shell-app.cpp:209
#40 0x00005b2dc728f95f in operator()
    (__closure=<optimized out>, monitor=<optimized out>)
    at ../wf-shell-git/src/util/wf-shell-app.cpp:185
#41 sigc::adaptor_functor<WayfireShellApp::on_activate()::<lambda(const GMonitor&)> >::operator()<const Glib::RefPtr<Gdk::Monitor>&>
    (this=<optimized out>, _A_arg1=<optimized out>)
    at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:89
#42 sigc::internal::slot_call1<WayfireShellApp::on_activate()::<lambda(const GMonitor&)>, void, const Glib::RefPtr<Gdk::Monitor>&>::call_it(sigc::internal::slot_rep *, sigc::type_trait_take_t) (rep=<optimized out>, a_1=<optimized out>)
    at /usr/include/sigc++-2.0/sigc++/functors/slot.h:170
#43 0x0000728780652eb7 in sigc::slot1<void, bool>::operator()
    (_A_a1=@0x7ffc9b02be00: 160, this=0x5b2dd9cfdd48)
    at /usr/include/sigc++-2.0/sigc++/functors/slot.h:675
#44 (anonymous namespace)::Display_signal_monitor_added_callback
    (self=<optimized out>, p0=0x5b2ddb9e9080 [GdkWaylandMonitor], data=0x5b2dd9cfdd40) at gdk/gdkmm/display.cc:189
#49 0x0000728780a85904 in <emit signal '???' on instance 0x5b2dd9ce29c0 [GdkWaylandDisplay]>
    (instance=instance@entry=0x5b2dd9ce29c0, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3583
    #45 0x0000728780a63023 in g_cclosure_marshal_VOID__OBJECTv
    (closure=0x5b2dd9d72d90, return_value=<optimized out>, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x5b2dd9ce2510) at ../glib/gobject/gmarshal.c:1910
    #46 0x0000728780a85732 in _g_closure_invoke_va
    (closure=0x5b2dd9d72d90, return_value=0x0, instance=0x5b2dd9ce29c0, args=0x7ffc9b02c0b0, n_params=<optimized out>, param_types=0x5b2dd9ce2510)
    at ../glib/gobject/gclosure.c:897
    #47 signal_emit_valist_unlocked
    (instance=instance@entry=0x5b2dd9ce29c0, signal_id=signal_id@entry=23, detail=detail@entry=0, var_args=var_args@entry=0x7ffc9b02c0b0)
    at ../glib/gobject/gsignal.c:3424
    #48 0x0000728780a85842 in g_signal_emit_valist
    (instance=0x5b2dd9ce29c0, signal_id=23, detail=0, var_args=var_args@entry=0x7ffc9b02c0b0) at ../glib/gobject/gsignal.c:3263
#50 0x00007287810b4ee1 in gdk_display_monitor_removed
    (display=0x5b2dd9ce29c0 [GdkWaylandDisplay], monitor=0x5b2ddb9e9080 [GdkWaylandMonitor]) at ../gtk/gdk/gdkdisplay.c:2765
#51 _gdk_wayland_screen_remove_output
    (screen=0x5b2dd9ce4b30 [GdkWaylandScreen], id=52)
    at ../gtk/gdk/wayland/gdkscreen-wayland.c:1896
#52 gdk_registry_handle_global_remove
    (data=0x5b2dd9ce29c0, registry=<optimized out>, id=52)
    at ../gtk/gdk/wayland/gdkdisplay-wayland.c:558
#53 0x000072877efbe596 in ffi_call_unix64 () at ../src/x86/unix64.S:104
#54 0x000072877efbb00e in ffi_call_int
    (cif=cif@entry=0x7ffc9b02c390, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>, closure=closure@entry=0x0) at ../src/x86/ffi64.c:673
#55 0x000072877efbdbd3 in ffi_call
    (cif=0x7ffc9b02c390, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>) at ../src/x86/ffi64.c:710
#56 0x000072878040e61b in ??? () at /usr/lib/libwayland-client.so.0
#57 0x000072878040ee63 in ??? () at /usr/lib/libwayland-client.so.0
#58 0x000072878040f12c in wl_display_dispatch_queue_pending ()
    at /usr/lib/libwayland-client.so.0
#59 0x00007287810af011 in _gdk_wayland_display_queue_events
    (display=<optimized out>) at ../gtk/gdk/wayland/gdkeventsource.c:201
#60 0x000072878107962b in gdk_display_get_event
    (display=0x5b2dd9ce29c0 [GdkWaylandDisplay]) at ../gtk/gdk/gdkdisplay.c:442
#61 0x00007287810b6b80 in gdk_event_source_dispatch
    (base=<optimized out>, callback=<optimized out>, data=<optimized out>)
    at ../gtk/gdk/wayland/gdkeventsource.c:120
#62 0x0000728780b0ea89 in g_main_dispatch (context=0x5b2dd9ceaed0)
    at ../glib/glib/gmain.c:3344
#63 0x0000728780b709b7 in g_main_context_dispatch_unlocked
    (context=0x5b2dd9ceaed0) at ../glib/glib/gmain.c:4152
#64 g_main_context_iterate_unlocked.isra.0
    (context=context@entry=0x5b2dd9ceaed0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4217
#65 0x0000728780b0df95 in g_main_context_iteration
    (context=context@entry=0x5b2dd9ceaed0, may_block=may_block@entry=1)
    at ../glib/glib/gmain.c:4282
#66 0x0000728780754b86 in g_application_run
    (application=0x5b2dd9cd9180 [gtkmm__GtkApplication], argc=<optimized out>, argv=0x7ffc9b02c978) at ../glib/gio/gapplication.c:2712
#67 0x00005b2dc7251a0f in WayfirePanelApp::create (argc=1, argv=0x7ffc9b02c978)
    at ../wf-shell-git/src/panel/panel.cpp:473
#68 main (argc=1, argv=0x7ffc9b02c978)
    at ../wf-shell-git/src/panel/panel.cpp:483
kode54 commented 4 months ago

First crash May 20th around 11:44a when I woke the displays:

May 20 11:44:07 laharl wf-panel[1450789]: gvc_mixer_card_get_index: assertion 'GVC_IS_MIXER_CARD (card)' failed
May 20 11:44:11 laharl wf-panel[1450789]: gtk_widget_remove_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed
May 20 11:44:11 laharl wf-panel[1450789]: gtk_widget_remove_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed
May 20 11:44:12 laharl wf-panel[1450789]: Creating pipes for GWakeup: Too many open files
May 20 11:44:12 laharl kernel: traps: wf-panel[1450789] trap int3 ip:73d586d13ad8 sp:7ffc84b83680 error:0 in libglib-2.0.so.0.8000.2[73d586cd0000+a4000]

Second crash logged to journal May 21st 11:47a around when I woke the displays:

May 21 11:46:42 laharl wf-panel[2790969]: gtk_widget_remove_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed
May 21 11:46:42 laharl wf-panel[2790969]: gtk_widget_remove_accelerator: assertion 'GTK_IS_ACCEL_GROUP (accel_group)' failed
May 21 11:46:42 laharl wf-panel[2790969]: Creating pipes for GWakeup: Too many open files
May 21 11:46:42 laharl kernel: traps: wf-panel[2790969] trap int3 ip:728780b13ad8 sp:7ffc9b02b810 error:0 in libglib-2.0.so.0.8000.2[728780ad0000+a4000]