Skip to content

display: Freeze stack when closing X11 display

If two X11 windows were the last two, we'd remove them from the stack while unmanaging them. That'd hit an assert in meta_stack_tracker_restack_managed(), resulting in the following crash when Xwayland exited unexpectedly with two or more X11 windows being the only windows on the stack:

 #1  g_assertion_message() at ../glib/gtestutils.c:3256
 #2  g_assertion_message_expr() at ../glib/gtestutils.c:3282
 #3  meta_stack_tracker_restack_managed() at ../src/core/stack-tracker.c:1210
 #4  on_stack_changed() at ../src/core/stack.c:142
 #5  _g_closure_invoke_va() at ../gobject/gclosure.c:895
 #6  g_signal_emit_valist() at ../gobject/gsignal.c:3456
 #7  g_signal_emit() at ../gobject/gsignal.c:3606
 #8 meta_stack_changed() at ../src/core/stack.c:265
 #9 meta_stack_remove() at ../src/core/stack.c:324
#10 meta_window_unmanage() at ../src/core/window.c:1542
#11 meta_x11_display_unmanage_windows() at ../src/x11/meta-x11-display.c:111
#12 meta_x11_display_dispose() at ../src/x11/meta-x11-display.c:141
#13 g_object_run_dispose() at ../gobject/gobject.c:1448
#14 meta_display_shutdown_x11() at ../src/core/display.c:831

The added test specifically checks that this scenario is handled gracefully.

Related: https://bugzilla.redhat.com/show_bug.cgi?id=2143637


Also comes with a test runner client alarm filter cleanup.

Merge request reports