Skip to content

Crash when changing number of outputs in labwc

Issue Description

When the number of active outputs is changed in labwc while xfdesktop is running, it crashes reproducibly. This is not reproducible with wayfire.

Steps to Reproduce Issue

  1. Start labwc from a tty with two outputs connected
  2. Start xfdesktop
  3. Reduce the number of active outputs to 1 by any means (e.g. start xfsettingsd to load a saved configuration)

Expected Behavior

No crash.

Additional Information

Backtrace:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  xdg_output_logical_position (data=0x5dff6e2e42d0, xdg_output=0x5dff6e2145a0, x=0, y=0) at ../libxfce4windowing/xfw-monitor-wayland.c:537
537	    monitor->logical_geometry.x = x;
[Current thread is 1 (Thread 0x76fed4191a40 (LWP 38353))]
(gdb) bt
#0  xdg_output_logical_position (data=0x5dff6e2e42d0, xdg_output=0x5dff6e2145a0, x=0, y=0) at ../libxfce4windowing/xfw-monitor-wayland.c:537
#1  0x000076fed521f976 in ffi_call_unix64 () at ../src/x86/unix64.S:104
#2  0x000076fed521c12c in ffi_call_int (cif=cif@entry=0x7ffd661f2820, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>, closure=closure@entry=0x0) at ../src/x86/ffi64.c:676
#3  0x000076fed521ef0e in ffi_call (cif=cif@entry=0x7ffd661f2820, fn=<optimized out>, rvalue=rvalue@entry=0x0, avalue=avalue@entry=0x7ffd661f28f0) at ../src/x86/ffi64.c:713
#4  0x000076fed4cc78b0 in wl_closure_invoke (closure=closure@entry=0x5dff6e5c7de0, target=<optimized out>, target@entry=0x5dff6e2145a0, opcode=opcode@entry=0, data=<optimized out>, flags=1)
    at ../wayland-1.23.1/src/connection.c:1228
#5  0x000076fed4cc8139 in dispatch_event (display=display@entry=0x5dff6e1e5ea0, queue=queue@entry=0x5dff6e1e5f98) at ../wayland-1.23.1/src/wayland-client.c:1674
#6  0x000076fed4cc8553 in dispatch_queue (display=0x5dff6e1e5ea0, queue=0x5dff6e1e5f98) at ../wayland-1.23.1/src/wayland-client.c:1820
#7  wl_display_dispatch_queue_pending (display=0x5dff6e1e5ea0, queue=0x5dff6e1e5f98) at ../wayland-1.23.1/src/wayland-client.c:2062
#8  0x000076fed4cc85c1 in wl_display_dispatch_pending (display=<optimized out>) at ../wayland-1.23.1/src/wayland-client.c:2125
#9  0x000076fed6252f21 in _gdk_wayland_display_queue_events (display=<optimized out>) at ../gtk/gdk/wayland/gdkeventsource.c:201
#10 0x000076fed621d68b in gdk_display_get_event (display=0x5dff6e1eb000) at ../gtk/gdk/gdkdisplay.c:442
#11 0x000076fed625b200 in gdk_event_source_dispatch (base=base@entry=0x5dff6e207d60, callback=<optimized out>, data=<optimized out>) at ../gtk/gdk/wayland/gdkeventsource.c:120
#12 0x000076fed6343104 in g_main_dispatch (context=0x5dff6e1f3c80) at ../glib/glib/gmain.c:3398
#13 0x000076fed63a6d57 in g_main_context_dispatch_unlocked (context=0x5dff6e1f3c80) at ../glib/glib/gmain.c:4249
#14 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x5dff6e1f3c80, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4314
#15 0x000076fed6342535 in g_main_context_iteration (context=context@entry=0x5dff6e1f3c80, may_block=may_block@entry=1) at ../glib/glib/gmain.c:4379
#16 0x000076fed657b756 in g_application_run (application=application@entry=0x5dff6e33a320, argc=<optimized out>, argv=<optimized out>) at ../glib/gio/gapplication.c:2715
#17 0x00005dff518682a2 in main (argc=<optimized out>, argv=<optimized out>) at ../src/main.c:71

I also had other backtraces yesterday, from a SIGTRAP following a critical warning, and from a SIGSEGV, under similar circumstances (session startup via startxfce4, so starting xfsettingsd which changes display settings after xfdesktop starts). I tend to think they're related, so I'm putting them here:

mars 12 22:52:40 pc xfdesktop.orig[51229]: xfce_desktop_new: assertion 'XFW_IS_MONITOR(monitor)' failed

Program terminated with signal SIGTRAP, Trace/breakpoint trap.
#0  _g_log_abort (breakpoint=<optimized out>) at ../glib/glib/gmessages.c:431
431	    G_BREAKPOINT ();
[Current thread is 1 (Thread 0x7ed74161fa40 (LWP 51229))]
(gdb) bt
#0  _g_log_abort (breakpoint=<optimized out>) at ../glib/glib/gmessages.c:431
#1  g_logv (log_domain=0x5c1210803593 "xfdesktop", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7ffd26b8b780) at ../glib/glib/gmessages.c:1287
#2  0x00007ed7437d5b54 in g_log (log_domain=log_domain@entry=0x5c1210803593 "xfdesktop", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7ed74389e36b "%s: assertion '%s' failed")
    at ../glib/glib/gmessages.c:1329
#3  0x00007ed7437d6e2e in g_return_if_fail_warning
    (log_domain=log_domain@entry=0x5c1210803593 "xfdesktop", pretty_function=pretty_function@entry=0x5c121080a960 <__func__.8> "xfce_desktop_new", expression=<optimized out>) at ../glib/glib/gmessages.c:3074
#4  0x00005c12107d2757 in xfce_desktop_new
    (gscreen=0x5c124ec6a3f0, monitor=monitor@entry=0x5c124ed9ad90, channel=0x5c124ed14210, property_prefix=property_prefix@entry=0x5c124ecbb560 "/backdrop/screen0/", backdrop_manager=0x5c124ee429e0)
    at ../src/xfce-desktop.c:1011
#5  0x00005c12107d4527 in create_desktop (app=0x5c124ed4a060, monitor=0x5c124ed9ad90) at ../src/xfdesktop-application.c:804
#6  add_monitor_desktop (app=0x5c124ed4a060, monitor=0x5c124ed9ad90) at ../src/xfdesktop-application.c:845
#7  handle_new_mirror_sets (app=<optimized out>, mirror_sets=<optimized out>) at ../src/xfdesktop-application.c:885
#8  handle_monitors_changed (app=0x5c124ed4a060) at ../src/xfdesktop-application.c:978
#9  0x00005c12107d4765 in screen_monitor_added (screen=<optimized out>, monitor=<optimized out>, app=<optimized out>) at ../src/xfdesktop-application.c:997
#10 0x00005c12107d4940 in xfdesktop_application_start (app=0x5c124ed4a060) at ../src/xfdesktop-application.c:1073
#14 0x00007ed7438fd034 in <emit signal '???' on instance ???> (instance=instance@entry=0x5c124ed4a060, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3597
    #11 0x00007ed7438fce5c in _g_closure_invoke_va (closure=0x5c124edf8710, return_value=0x0, instance=0x5c124ed4a060, args=0x7ffd26b8bba0, n_params=0, param_types=0x0) at ../glib/gobject/gclosure.c:896
    #12 signal_emit_valist_unlocked (instance=instance@entry=0x5c124ed4a060, signal_id=signal_id@entry=195, detail=detail@entry=0, var_args=var_args@entry=0x7ffd26b8bba0) at ../glib/gobject/gsignal.c:3438
    #13 0x00007ed7438fcf72 in g_signal_emit_valist (instance=0x5c124ed4a060, signal_id=195, detail=0, var_args=var_args@entry=0x7ffd26b8bba0) at ../glib/gobject/gsignal.c:3277
#15 0x00007ed743a07d8b in g_application_register (application=application@entry=0x5c124ed4a060, cancellable=cancellable@entry=0x0, error=error@entry=0x7ffd26b8bd40) at ../glib/gio/gapplication.c:2355
#16 0x00007ed743a082d2 in g_application_real_local_command_line (application=0x5c124ed4a060, arguments=0x7ffd26b8bd98, exit_status=0x7ffd26b8bd94) at ../glib/gio/gapplication.c:1155
#17 0x00007ed743a08668 in g_application_run (application=application@entry=0x5c124ed4a060, argc=<optimized out>, argv=<optimized out>) at ../glib/gio/gapplication.c:2684
#18 0x00005c12107cb2a2 in main (argc=<optimized out>, argv=<optimized out>) at ../src/main.c:71
Program terminated with signal SIGSEGV, Segmentation fault.
#0  xdg_output_logical_position (data=0x5bcae665e920, xdg_output=0x5bcae6590260, x=0, y=0) at ../libxfce4windowing/xfw-monitor-wayland.c:537
537	    monitor->logical_geometry.x = x;
[Current thread is 1 (Thread 0x72f4a35aca40 (LWP 51979))]
(gdb) bt
#0  xdg_output_logical_position (data=0x5bcae665e920, xdg_output=0x5bcae6590260, x=0, y=0) at ../libxfce4windowing/xfw-monitor-wayland.c:537
#1  0x000072f4a463a976 in ffi_call_unix64 () at ../src/x86/unix64.S:104
#2  0x000072f4a463712c in ffi_call_int (cif=cif@entry=0x7ffd4682bc90, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>, closure=closure@entry=0x0) at ../src/x86/ffi64.c:676
#3  0x000072f4a4639f0e in ffi_call (cif=cif@entry=0x7ffd4682bc90, fn=<optimized out>, rvalue=rvalue@entry=0x0, avalue=avalue@entry=0x7ffd4682bd60) at ../src/x86/ffi64.c:713
#4  0x000072f4a40e28b0 in wl_closure_invoke (closure=closure@entry=0x5bcae68063a0, target=<optimized out>, target@entry=0x5bcae6590260, opcode=opcode@entry=0, data=<optimized out>, flags=1)
    at ../wayland-1.23.1/src/connection.c:1228
#5  0x000072f4a40e3139 in dispatch_event (display=display@entry=0x5bcae655fed0, queue=queue@entry=0x5bcae655ffc8) at ../wayland-1.23.1/src/wayland-client.c:1674
#6  0x000072f4a40e3553 in dispatch_queue (display=0x5bcae655fed0, queue=0x5bcae655ffc8) at ../wayland-1.23.1/src/wayland-client.c:1820
#7  wl_display_dispatch_queue_pending (display=display@entry=0x5bcae655fed0, queue=queue@entry=0x5bcae655ffc8) at ../wayland-1.23.1/src/wayland-client.c:2062
#8  0x000072f4a40e51c4 in wl_display_dispatch_queue (display=<optimized out>, queue=<optimized out>) at ../wayland-1.23.1/src/wayland-client.c:2038
#9  0x000072f4a40e64cc in wl_display_roundtrip_queue (display=0x5bcae655fed0, queue=0x5bcae655ffc8) at ../wayland-1.23.1/src/wayland-client.c:1448
#10 0x000072f4a5869812 in g_closure_invoke (closure=0x5bcae6745a70, return_value=0x0, n_param_values=1, param_values=0x7ffd4682c130, invocation_hint=0x7ffd4682c080) at ../glib/gobject/gclosure.c:833
#11 0x000072f4a5899f85 in signal_emit_unlocked_R.isra.0
    (node=node@entry=0x7ffd4682c220, detail=detail@entry=0, instance=instance@entry=0x5bcae6769ce0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd4682c130)
    at ../glib/gobject/gsignal.c:3902
#12 0x000072f4a588ace9 in signal_emit_valist_unlocked (instance=instance@entry=0x5bcae6769ce0, signal_id=signal_id@entry=56, detail=detail@entry=0, var_args=var_args@entry=0x7ffd4682c390)
    at ../glib/gobject/gsignal.c:3534
#13 0x000072f4a588af72 in g_signal_emit_valist (instance=0x5bcae6769ce0, signal_id=56, detail=0, var_args=var_args@entry=0x7ffd4682c390) at ../glib/gobject/gsignal.c:3277
#14 0x000072f4a588b034 in g_signal_emit (instance=instance@entry=0x5bcae6769ce0, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3597
#15 0x000072f4a5388cb2 in gtk_widget_map (widget=0x5bcae6769ce0) at ../gtk/gtk/gtkwidget.c:5053
#16 gtk_widget_map (widget=0x5bcae6769ce0) at ../gtk/gtk/gtkwidget.c:5036
#17 0x000072f4a53aaa82 in gtk_window_show (widget=0x5bcae6769ce0) at ../gtk/gtk/gtkwindow.c:6210
#18 0x000072f4a5869812 in g_closure_invoke (closure=0x5bcae6574530, return_value=0x0, n_param_values=1, param_values=0x7ffd4682c6a0, invocation_hint=0x7ffd4682c5f0) at ../glib/gobject/gclosure.c:833
#19 0x000072f4a589a0c2 in signal_emit_unlocked_R.isra.0
    (node=node@entry=0x7ffd4682c790, detail=detail@entry=0, instance=instance@entry=0x5bcae6769ce0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffd4682c6a0)
    at ../glib/gobject/gsignal.c:3735
#20 0x000072f4a588ace9 in signal_emit_valist_unlocked (instance=instance@entry=0x5bcae6769ce0, signal_id=signal_id@entry=54, detail=detail@entry=0, var_args=var_args@entry=0x7ffd4682c900)
    at ../glib/gobject/gsignal.c:3534
#21 0x000072f4a588af72 in g_signal_emit_valist (instance=0x5bcae6769ce0, signal_id=54, detail=0, var_args=var_args@entry=0x7ffd4682c900) at ../glib/gobject/gsignal.c:3277
#22 0x000072f4a588b034 in g_signal_emit (instance=instance@entry=0x5bcae6769ce0, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3597
#23 0x000072f4a53893b3 in gtk_widget_show (widget=0x5bcae6769ce0) at ../gtk/gtk/gtkwidget.c:4854
#24 gtk_widget_show (widget=0x5bcae6769ce0) at ../gtk/gtk/gtkwidget.c:4827
#25 0x00005bcad43da646 in create_desktop (app=0x5bcae66b4b80, monitor=0x5bcae6658060) at ../src/xfdesktop-application.c:835
#26 add_monitor_desktop (app=0x5bcae66b4b80, monitor=0x5bcae6658060) at ../src/xfdesktop-application.c:845
#27 handle_new_mirror_sets (app=<optimized out>, mirror_sets=<optimized out>) at ../src/xfdesktop-application.c:885
#28 handle_monitors_changed (app=0x5bcae66b4b80) at ../src/xfdesktop-application.c:978
#29 0x00005bcad43da765 in screen_monitor_added (screen=<optimized out>, monitor=<optimized out>, app=<optimized out>) at ../src/xfdesktop-application.c:997
#30 0x00005bcad43da940 in xfdesktop_application_start (app=0x5bcae66b4b80) at ../src/xfdesktop-application.c:1073
#34 0x000072f4a588b034 in <emit signal '???' on instance ???> (instance=instance@entry=0x5bcae66b4b80, signal_id=<optimized out>, detail=detail@entry=0) at ../glib/gobject/gsignal.c:3597
    #31 0x000072f4a588ae5c in _g_closure_invoke_va (closure=0x5bcae66f4530, return_value=0x0, instance=0x5bcae66b4b80, args=0x7ffd4682cd10, n_params=0, param_types=0x0) at ../glib/gobject/gclosure.c:896
    #32 signal_emit_valist_unlocked (instance=instance@entry=0x5bcae66b4b80, signal_id=signal_id@entry=195, detail=detail@entry=0, var_args=var_args@entry=0x7ffd4682cd10) at ../glib/gobject/gsignal.c:3438
    #33 0x000072f4a588af72 in g_signal_emit_valist (instance=0x5bcae66b4b80, signal_id=195, detail=0, var_args=var_args@entry=0x7ffd4682cd10) at ../glib/gobject/gsignal.c:3277
#35 0x000072f4a5995d8b in g_application_register (application=application@entry=0x5bcae66b4b80, cancellable=cancellable@entry=0x0, error=error@entry=0x7ffd4682ceb0) at ../glib/gio/gapplication.c:2355
#36 0x000072f4a59962d2 in g_application_real_local_command_line (application=0x5bcae66b4b80, arguments=0x7ffd4682cf08, exit_status=0x7ffd4682cf04) at ../glib/gio/gapplication.c:1155
#37 0x000072f4a5996668 in g_application_run (application=application@entry=0x5bcae66b4b80, argc=<optimized out>, argv=<optimized out>) at ../glib/gio/gapplication.c:2684
#38 0x00005bcad43d12a2 in main (argc=<optimized out>, argv=<optimized out>) at ../src/main.c:71

Environment & Versions

  • OS distribution and version: arch linux up to date
  • Overall Xfce version: 4.20
  • xfdesktop version (git hash if not a release): 4.20.1+13+gc4aa966e
  • Windowing system (X11/Wayland): Wayland
  • Compositor and version (if Wayland): labwc 0.8.3 or 0.8.3+24+g9e6aaa68
  • GTK Theme: Adwaita
  • Icon Theme: elementary-xfce
  • UI Scale Factor: 1
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information