Assert after closing lid while game is on
On this 2-in-1, with touchscreen, with "Suspend when laptop lid is closed" disabled in Tweaks. If I start a proton game that locks the pointer and then close the lid, I get:
(gdb) bt
#0 0x00007f7157d11625 in raise () from /lib64/libc.so.6
#1 0x0000000000402988 in dump_gjs_stack_on_signal_handler (signo=6)
at ../../../../Source/gnome/gnome-shell/src/main.c:402
#2 <signal handler called>
#3 0x00007f7157d11625 in raise () from /lib64/libc.so.6
#4 0x00007f7157cfa8d9 in abort () from /lib64/libc.so.6
#5 0x00007f7158b8a54c in g_assertion_message (
domain=domain@entry=0x7f7157fdc41c "mutter",
file=file@entry=0x7f7157fd7fc0 "../../../../Source/gnome/mutter/src/backends/meta-backend.c", line=line@entry=1252,
func=func@entry=0x7f7157fd8080 <__func__.118289> "meta_backend_set_client_pointer_constraint",
message=message@entry=0x3a726a0 "assertion failed: (!constraint || !priv->client_pointer_constraint)")
at ../../../../Source/gnome/glib/glib/gtestutils.c:2907
#6 0x00007f7158b8a5a5 in g_assertion_message_expr (
domain=domain@entry=0x7f7157fdc41c "mutter",
file=file@entry=0x7f7157fd7fc0 "../../../../Source/gnome/mutter/src/backends/meta-backend.c", line=line@entry=1252,
func=func@entry=0x7f7157fd8080 <__func__.118289> "meta_backend_set_client_pointer_constraint",
expr=expr@entry=0x7f7157fd8028 "!constraint || !priv->client_pointer_constraint") at ../../../../Source/gnome/glib/glib/gtestutils.c:2933
--Type <RET> for more, q to quit, c to continue without paging--
#7 0x00007f7157f04534 in meta_backend_set_client_pointer_constraint (
backend=backend@entry=0x11150e0, constraint=0x40e1660)
at ../../../../Source/gnome/mutter/src/backends/meta-backend.c:1252
#8 0x00007f7157fa186a in meta_wayland_pointer_constraint_enable (
constraint=0x7f711402bd80)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer-constraints.c:411
#9 meta_wayland_pointer_constraint_maybe_enable (
constraint=constraint@entry=0x7f711402bd80)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer-constraints.c:526
#10 0x00007f7157fa1cf1 in pointer_focus_surface_changed (
pointer=<optimized out>, constraint=0x7f711402bd80)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer-constraints.c:295
#11 0x00007f7158c41fda in g_cclosure_marshal_VOID__VOIDv (
closure=closure@entry=0x42bafa0, return_value=return_value@entry=0x0,
instance=instance@entry=0x1124e70, args=args@entry=0x7fffc30702a8,
marshal_data=marshal_data@entry=0x0, n_params=n_params@entry=0,
param_types=0x0) at ../../../../Source/gnome/glib/gobject/gmarshal.c:165
#12 0x00007f7158c4043c in _g_closure_invoke_va (
closure=closure@entry=0x42bafa0, return_value=return_value@entry=0x0,
instance=instance@entry=0x1124e70, args=args@entry=0x7fffc30702a8,
--Type <RET> for more, q to quit, c to continue without paging--
n_params=0, param_types=0x0)
at ../../../../Source/gnome/glib/gobject/gclosure.c:873
#13 0x00007f7158c5a6b2 in g_signal_emit_valist (instance=0x1124e70,
signal_id=<optimized out>, detail=0,
var_args=var_args@entry=0x7fffc30702a8)
at ../../../../Source/gnome/glib/gobject/gsignal.c:3306
#14 0x00007f7158c5b630 in g_signal_emit (instance=instance@entry=0x1124e70,
signal_id=<optimized out>, detail=detail@entry=0)
at ../../../../Source/gnome/glib/gobject/gsignal.c:3453
#15 0x00007f7157f9ff73 in meta_wayland_pointer_set_focus (
pointer=pointer@entry=0x1124e70, surface=surface@entry=0x3e37540)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer.c:948
#16 0x00007f7157fa07dd in default_grab_focus (grab=<optimized out>,
surface=0x3e37540)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer.c:448
#17 0x00007f7157fa0441 in meta_wayland_pointer_end_grab (pointer=0x1124e70)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer.c:979
#18 0x00007f7157fa11c3 in meta_wayland_pointer_constraint_disable (
constraint=constraint@entry=0x7f711402bd80)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer-constraints.c:422
#19 0x00007f7157fa1412 in meta_wayland_pointer_constraint_deactivate (
constraint=constraint@entry=0x7f711402bd80)
--Type <RET> for more, q to quit, c to continue without paging--
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer-constraints.c:548
#20 0x00007f7157fa14be in meta_wayland_pointer_constraint_maybe_remove_for_seat
(seat=<optimized out>, window=window@entry=0x3ff1200)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer-constraints.c:572
#21 0x00007f7157fa1ce9 in pointer_focus_surface_changed (
pointer=<optimized out>, constraint=0x7f711402bd80)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer-constraints.c:292
#22 0x00007f7158c41fda in g_cclosure_marshal_VOID__VOIDv (
closure=<optimized out>, return_value=<optimized out>,
instance=<optimized out>, args=<optimized out>,
marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x0)
at ../../../../Source/gnome/glib/gobject/gmarshal.c:165
#23 0x00007f7158c40510 in _g_closure_invoke_va (
closure=closure@entry=0x42bafa0, return_value=return_value@entry=0x0,
instance=instance@entry=0x1124e70, args=args@entry=0x7fffc30706b8,
n_params=0, param_types=0x0)
at ../../../../Source/gnome/glib/gobject/gclosure.c:873
#24 0x00007f7158c5a6b2 in g_signal_emit_valist (instance=0x1124e70,
signal_id=<optimized out>, detail=0,
var_args=var_args@entry=0x7fffc30706b8)
--Type <RET> for more, q to quit, c to continue without paging--
at ../../../../Source/gnome/glib/gobject/gsignal.c:3306
#25 0x00007f7158c5b630 in g_signal_emit (instance=instance@entry=0x1124e70,
signal_id=<optimized out>, detail=detail@entry=0)
at ../../../../Source/gnome/glib/gobject/gsignal.c:3453
#26 0x00007f7157f9ff73 in meta_wayland_pointer_set_focus (
pointer=pointer@entry=0x1124e70, surface=surface@entry=0x0)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer.c:948
#27 0x00007f7157f9ffdf in sync_focus_surface (pointer=0x1124e70)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer.c:233
#28 0x00007f7157fa01ac in meta_wayland_pointer_on_cursor_visibility_changed (
cursor_tracker=<optimized out>, pointer=<optimized out>)
at ../../../../Source/gnome/mutter/src/wayland/meta-wayland-pointer.c:487
#29 0x00007f7158c41fda in g_cclosure_marshal_VOID__VOIDv (
closure=<optimized out>, return_value=<optimized out>,
instance=<optimized out>, args=<optimized out>,
marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x0)
at ../../../../Source/gnome/glib/gobject/gmarshal.c:165
#30 0x00007f7158c40510 in _g_closure_invoke_va (
closure=closure@entry=0x147a680, return_value=return_value@entry=0x0,
instance=instance@entry=0x11434a0, args=args@entry=0x7fffc3070a28,
n_params=0, param_types=0x0)
at ../../../../Source/gnome/glib/gobject/gclosure.c:873
#31 0x00007f7158c5a6b2 in g_signal_emit_valist (instance=0x11434a0,
--Type <RET> for more, q to quit, c to continue without paging--
signal_id=<optimized out>, detail=0,
var_args=var_args@entry=0x7fffc3070a28)
at ../../../../Source/gnome/glib/gobject/gsignal.c:3306
#32 0x00007f7158c5b630 in g_signal_emit (instance=instance@entry=0x11434a0,
signal_id=<optimized out>, detail=detail@entry=0)
at ../../../../Source/gnome/glib/gobject/gsignal.c:3453
#33 0x00007f7157f06ddd in meta_cursor_tracker_set_pointer_visible (
tracker=tracker@entry=0x11434a0, visible=<optimized out>)
at ../../../../Source/gnome/mutter/src/backends/meta-cursor-tracker.c:457
#34 0x00007f7157f03978 in on_device_removed (
device_manager=device_manager@entry=0x1122470, device=<optimized out>,
user_data=user_data@entry=0x11150e0)
at ../../../../Source/gnome/mutter/src/backends/meta-backend.c:446
#35 0x00007f7158c43056 in g_cclosure_marshal_VOID__OBJECT (closure=0x13918a0,
return_value=<optimized out>, n_param_values=<optimized out>,
param_values=0x7fffc3070d80, invocation_hint=<optimized out>,
marshal_data=<optimized out>)
at ../../../../Source/gnome/glib/gobject/gmarshal.c:1852
#36 0x00007f7158c40314 in g_closure_invoke (closure=0x13918a0,
return_value=return_value@entry=0x0,
n_param_values=n_param_values@entry=2,
param_values=param_values@entry=0x7fffc3070d80,
invocation_hint=invocation_hint@entry=0x7fffc3070d20)
--Type <RET> for more, q to quit, c to continue without paging--
at ../../../../Source/gnome/glib/gobject/gclosure.c:810
#37 0x00007f7158c525be in signal_emit_unlocked_R (node=node@entry=0x1336300,
detail=detail@entry=0, instance=instance@entry=0x1122470,
emission_return=emission_return@entry=0x0,
instance_and_params=instance_and_params@entry=0x7fffc3070d80)
at ../../../../Source/gnome/glib/gobject/gsignal.c:3641
#38 0x00007f7158c5b114 in g_signal_emit_valist (instance=0x1122470,
signal_id=<optimized out>, detail=0,
var_args=var_args@entry=0x7fffc3070f18)
at ../../../../Source/gnome/glib/gobject/gsignal.c:3397
#39 0x00007f7158c5b630 in g_signal_emit (instance=instance@entry=0x1122470,
signal_id=<optimized out>, detail=detail@entry=0)
at ../../../../Source/gnome/glib/gobject/gsignal.c:3453
#40 0x00007f71581c02d3 in _clutter_device_manager_remove_device (
device_manager=device_manager@entry=0x1122470, device=0x13a5970)
at ../../../../Source/gnome/mutter/clutter/clutter/clutter-device-manager.c:500
#41 0x00007f7157fbaf4d in evdev_remove_device (device_evdev=0x13a5970,
manager_evdev=0x1122470)
at ../../../../Source/gnome/mutter/src/backends/native/meta-device-manager-native.c:798
#42 process_base_event (event=0x13f92f0, manager_evdev=0x1122470)
at ../../../../Source/gnome/mutter/src/backends/native/meta-device-manager-n--Type <RET> for more, q to quit, c to continue without paging--
ative.c:939
#43 process_event (event=0x13f92f0, manager_evdev=0x1122470)
at ../../../../Source/gnome/mutter/src/backends/native/meta-device-manager-native.c:1765
#44 process_events (manager_evdev=manager_evdev@entry=0x1122470)
at ../../../../Source/gnome/mutter/src/backends/native/meta-device-manager-native.c:1779
#45 0x00007f7157fbc019 in dispatch_libinput (
manager_evdev=manager_evdev@entry=0x1122470)
at ../../../../Source/gnome/mutter/src/backends/native/meta-device-manager-native.c:639
#46 0x00007f7157fbc268 in meta_event_dispatch (
g_source=g_source@entry=0x1339120, callback=<optimized out>,
user_data=<optimized out>)
at ../../../../Source/gnome/mutter/src/backends/native/meta-device-manager-native.c:660
#47 0x00007f7158b65c18 in g_main_dispatch (context=0x1110850)
at ../../../../Source/gnome/glib/glib/gmain.c:3179
#48 g_main_context_dispatch (context=context@entry=0x1110850)
at ../../../../Source/gnome/glib/glib/gmain.c:3844
#49 0x00007f7158b65f8b in g_main_context_iterate (context=0x1110850,
block=block@entry=1, dispatch=dispatch@entry=1, self=self@entry=0x1111090)
at ../../../../Source/gnome/glib/glib/gmain.c:3917
--Type <RET> for more, q to quit, c to continue without paging--
#50 0x00007f7158b66307 in g_main_loop_run (loop=0x1396c00) at ../../../../Source/gnome/glib/glib/gmain.c:4111
#51 0x00007f7157f50c9e in meta_run () at ../../../../Source/gnome/mutter/src/core/main.c:668
#52 0x0000000000402d9b in main (argc=<optimized out>, argv=<optimized out>) at ../../../../Source/gnome/gnome-shell/src/main.c:561
What I think happens is:
- touchpad device is removed (logind? firmware? this device also does some device hiding shenanigans in tablet mode)
- the backend unsets pointer visibility as only the touchscreen remains
- we also try to "leave" the pointer surface, so there's no dangling invisible cursor highlighting stuff
- we unset the pointer focus
- which unsets the pointer constraint
- which ends the grab and picks for the pointer again
- which finds again the surface, with a pointer constraint request
- which asserts as we were in the middle of dropping it
This is probably a quite uncommon situation, filing it though so it's not forgotten.