Moving a window using Meta.Window.move_frame from javascript sometimes crashes gnome-shell
While writing an extension, I've found that calling move_frame on a MetaWindow sometimes causes a crash.
Here's a proof of concept to replicate this issue: https://github.com/cwyc/gnome-move-frame-bug-test/blob/master/test%40example.com/extension.js
The code adds a signal listener which tries to move each new window to (100,100) using move_frame. A variable controls when move_frame is called. If it's called immediately after we receive the "window-added" signal, gnome-shell crashes and I'm returned to the gdm login screen. But if we wait 500ms after we get the signal to call move_frame, it functions normally.
I suspect it's related to these issues: #156 #16
Using Gnome 3.36.5 Wayland on nixos 20.09
Here are the relevant parts of my journald log:
Jan 11 16:31:29 nixos .gnome-shell-wr[7612]: Trying to move the window!
Jan 11 16:31:29 nixos .gnome-shell-wr[7612]: Trying to move the window!
Jan 11 16:31:29 nixos gnome-shell[7612]: == Stack trace for context 0x1e6c500 ==
Jan 11 16:31:29 nixos gnome-shell[7612]: #0 2f74ec0 i /home/cwyc/.local/share/gnome-shell/extensions/test@example.com/extension.js:30 (f25d54de088 @ 34)
Jan 11 16:31:29 nixos kernel: .gnome-shell-wr[7612]: segfault at 18 ip 00007f08dc9a6edf sp 00007ffe63b3b750 error 4 in libmutter-6.so.0.0.0[7f08dc91a000+10b000]
Jan 11 16:31:29 nixos kernel: Code: 0e 02 00 e9 28 ff ff ff 0f 1f 00 48 89 ef e8 58 bd ff ff e9 b8 fe ff ff 0f 1f 00 41 55 41 54 55 48 89 fd 53 89 f3 48 83 ec 08 <48> 8b 47 18 4c 8b 67 30 4c 8b a8 68 02 00 00 48 8b 07 ff 90 f8 00
Jan 11 16:31:29 nixos systemd[1]: Started Process Core Dump (PID 8511/UID 0).
And here is a stack trace:
Thread 1 ".gnome-shell-wr" received signal SIGSEGV, Segmentation fault.
0x00007f08dc9a6edf in meta_window_update_monitor () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
#0 0x00007f08dc9a6edf in meta_window_update_monitor () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#1 0x00007f08dc9ff564 in meta_window_wayland_update_main_monitor () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#2 0x00007f08dc9a6ef7 in meta_window_update_monitor () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#3 0x00007f08dc9a7106 in meta_window_move_resize_internal () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#4 0x00007f08dbba2abd in ffi_call_unix64 () from /nix/store/mqr1hbh7jmgpmdfd7bb0yr54brb1b9xy-libffi-3.3/lib/libffi.so.7
No symbol table info available.
#5 0x00007f08dbba179c in ffi_call_int () from /nix/store/mqr1hbh7jmgpmdfd7bb0yr54brb1b9xy-libffi-3.3/lib/libffi.so.7
No symbol table info available.
#6 0x00007f08dcc6d039 in gjs_invoke_c_function(JSContext*, Function*, JS::Handle<JSObject*>, JS::HandleValueArray const&, mozilla::Maybe<JS::MutableHandle<JS::Value> >, _GIArgument*) () from /nix/store/4k7lyjqv0wgs6wd6bq8wmfvjwypddqln-gjs-1.64.4/lib/libgjs.so.0
No symbol table info available.
#7 0x00007f08dcc6edf7 in function_call(JSContext*, unsigned int, JS::Value*) () from /nix/store/4k7lyjqv0wgs6wd6bq8wmfvjwypddqln-gjs-1.64.4/lib/libgjs.so.0
No symbol table info available.
#8 0x00007f08dab7eb9b in js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) () from /nix/store/arffxxmzks3a7m4zzvfigc730695xf5m-spidermonkey-68.10.0/lib/libmozjs-68.so
No symbol table info available.
#9 0x00007f08dab705c6 in Interpret(JSContext*, js::RunState&) () from /nix/store/arffxxmzks3a7m4zzvfigc730695xf5m-spidermonkey-68.10.0/lib/libmozjs-68.so
No symbol table info available.
#10 0x00007f08dab7deae in js::RunScript(JSContext*, js::RunState&) () from /nix/store/arffxxmzks3a7m4zzvfigc730695xf5m-spidermonkey-68.10.0/lib/libmozjs-68.so
No symbol table info available.
#11 0x00007f08dab7e935 in js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct) () from /nix/store/arffxxmzks3a7m4zzvfigc730695xf5m-spidermonkey-68.10.0/lib/libmozjs-68.so
No symbol table info available.
#12 0x00007f08dab7f7cf in js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>) () from /nix/store/arffxxmzks3a7m4zzvfigc730695xf5m-spidermonkey-68.10.0/lib/libmozjs-68.so
No symbol table info available.
#13 0x00007f08daf24dd0 in JS_CallFunction(JSContext*, JS::Handle<JSObject*>, JS::Handle<JSFunction*>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) () from /nix/store/arffxxmzks3a7m4zzvfigc730695xf5m-spidermonkey-68.10.0/lib/libmozjs-68.so
No symbol table info available.
#14 0x00007f08dcc6730c in gjs_closure_invoke(_GClosure*, JS::Handle<JSObject*>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>, bool) () from /nix/store/4k7lyjqv0wgs6wd6bq8wmfvjwypddqln-gjs-1.64.4/lib/libgjs.so.0
No symbol table info available.
#15 0x00007f08dcc9316c in closure_marshal(_GClosure*, _GValue*, unsigned int, _GValue const*, void*, void*) () from /nix/store/4k7lyjqv0wgs6wd6bq8wmfvjwypddqln-gjs-1.64.4/lib/libgjs.so.0
No symbol table info available.
#16 0x00007f08dd67eec2 in g_closure_invoke () from /nix/store/m7f15ibdd637dy3aysakk47xkqzj956l-glib-2.64.5/lib/libgobject-2.0.so.0
No symbol table info available.
#17 0x00007f08dd691dc4 in signal_emit_unlocked_R () from /nix/store/m7f15ibdd637dy3aysakk47xkqzj956l-glib-2.64.5/lib/libgobject-2.0.so.0
No symbol table info available.
#18 0x00007f08dd69cfef in g_signal_emit_valist () from /nix/store/m7f15ibdd637dy3aysakk47xkqzj956l-glib-2.64.5/lib/libgobject-2.0.so.0
No symbol table info available.
#19 0x00007f08dd69d97f in g_signal_emit () from /nix/store/m7f15ibdd637dy3aysakk47xkqzj956l-glib-2.64.5/lib/libgobject-2.0.so.0
No symbol table info available.
#20 0x00007f08dc9ae305 in meta_workspace_add_window () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#21 0x00007f08dc9a31db in set_workspace_state () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#22 0x00007f08dc9a97e6 in _meta_window_shared_new () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#23 0x00007f08dca00452 in meta_window_wayland_new () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#24 0x00007f08dc9fe2a8 in xdg_surface_constructor_get_toplevel () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#25 0x00007f08dbba2abd in ffi_call_unix64 () from /nix/store/mqr1hbh7jmgpmdfd7bb0yr54brb1b9xy-libffi-3.3/lib/libffi.so.7
No symbol table info available.
#26 0x00007f08dbba179c in ffi_call_int () from /nix/store/mqr1hbh7jmgpmdfd7bb0yr54brb1b9xy-libffi-3.3/lib/libffi.so.7
No symbol table info available.
#27 0x00007f08dc384370 in wl_closure_invoke () from /nix/store/2jfbxljx39mg2nd6614iikdpcgi1jc3i-wayland-1.18.0/lib/libwayland-server.so.0
No symbol table info available.
#28 0x00007f08dc3807f2 in wl_client_connection_data () from /nix/store/2jfbxljx39mg2nd6614iikdpcgi1jc3i-wayland-1.18.0/lib/libwayland-server.so.0
No symbol table info available.
#29 0x00007f08dc382402 in wl_event_loop_dispatch () from /nix/store/2jfbxljx39mg2nd6614iikdpcgi1jc3i-wayland-1.18.0/lib/libwayland-server.so.0
No symbol table info available.
#30 0x00007f08dc9de4c7 in wayland_event_source_dispatch () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#31 0x00007f08dd59444d in g_main_context_dispatch () from /nix/store/m7f15ibdd637dy3aysakk47xkqzj956l-glib-2.64.5/lib/libglib-2.0.so.0
No symbol table info available.
#32 0x00007f08dd5946d0 in g_main_context_iterate.isra () from /nix/store/m7f15ibdd637dy3aysakk47xkqzj956l-glib-2.64.5/lib/libglib-2.0.so.0
No symbol table info available.
#33 0x00007f08dd5949a3 in g_main_loop_run () from /nix/store/m7f15ibdd637dy3aysakk47xkqzj956l-glib-2.64.5/lib/libglib-2.0.so.0
No symbol table info available.
#34 0x00007f08dc992604 in meta_run () from /nix/store/dij6xv5ld3c3vkvmkv1qk00chhc58c8i-mutter-3.36.5/lib/libmutter-6.so.0
No symbol table info available.
#35 0x000000000040383d in main ()
No symbol table info available.
A debugging session is active.
Inferior 1 [process 7612] will be detached.
Quit anyway? (y or n) [answered Y; input not from terminal]
[Inferior 1 (process 7612) detached]