Skip to content

workspace: Warn instead of abort on incorrect API usage

This is not a real bug fix, but will avoid a crash caused by what seems like a bug in gnome-shell JS code. It has the following backtraces:

== Stack trace for context 0x55cb714d3620 ==
#0   55cb725e2f30 i   resource:///org/gnome/shell/ui/workspaceAnimation.js:466 (3b1cac847740 @ 47)
#1   7ffcf41168b0 b   resource:///org/gnome/shell/ui/environment.js:153 (3fd55e1cc4c0 @ 98)
#2   55cb725e2ea8 i   resource:///org/gnome/shell/ui/environment.js:317 (3fd55e1cc9c0 @ 14)
#8  0x00007fe9586287f4 in __GI_abort () at abort.c:79
#9  0x00007fe958aeb5f5 in meta_bug (format=<optimized out>) at ../src/core/util.c:368
#11 meta_workspace_activate_with_focus (workspace=0x561ef98a9700, focus_this=0x0, timestamp=6702096) at ../src/core/workspace.c:585
#12 0x00007fe958815746 in ffi_call_unix64 () at ../src/x86/unix64.S:105
#13 0x00007fe9588124d2 in ffi_call_int (cif=<optimized out>, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>, closure=<optimized out>) at ../src/x86/ffi64.c:672
#14 0x00007fe958efe67e in Gjs::Function::invoke (this=0x561ef765c960, context=0x561ef65723a0, args=..., this_obj=..., r_value=0x0) at ../gi/function.cpp:968
#15 0x00007fe958efed77 in Gjs::Function::call (context=0x561ef65723a0, js_argc=<optimized out>, vp=<optimized out>) at ../gi/function.cpp:1148
#16 0x00007fe956f405a2 in CallJSNative (args=..., reason=js::CallReason::Call, native=0x7fe958efeca0 <Gjs::Function::call(JSContext*, unsigned int, JS::Value*)>, cx=0x561ef65723a0) at /usr/src/debug/mozjs91-91.13.0-1.fc36.x86_64/vm/Interpreter.cpp:426
#17 js::InternalCallOrConstruct (cx=0x561ef65723a0, args=..., construct=<optimized out>, reason=js::CallReason::Call) at /usr/src/debug
#18 0x00007fe956f34010 in js::CallFromStack (args=..., cx=<optimized out>) at /usr/src/debug/mozjs91-91.13.0-1.fc36.x86_64/vm/Interpreter.cpp:575
#19 Interpret (cx=0x561ef65723a0, state=...) at /usr/src/debug/mozjs91-91.13.0-1.fc36.x86_64/vm/Interpreter.cpp:32
#20 0x00007fe956f3ff3c in js::RunScript (cx=0x561ef65723a0, state=...) at /usr/src/debug/mozjs91-91.13.0-1.fc36.x86_64/vm/Interpreter.cpp:395
#21 0x00007fe956f403b0 in js::InternalCallOrConstruct (cx=0x561ef65723a0, args=..., construct=js::NO_CONSTRUCT, reason=js::CallReason::Call) at /usr/src/debug/mozjs91-91.13.0-1.fc36.x86_64/vm/Interpreter.cpp:543
#22 0x00007fe956f40875 in js::Call (cx=<optimized out>, fval=..., thisv=..., args=..., rval=..., reason=<optimized out>) at /usr/src/debug/mozjs91-91.13.0-1.fc36.x86_64/vm/Interpreter.cpp:588
#23 0x00007fe956fa312c in JS_CallFunction (cx=0x561ef65723a0, obj=obj@entry=..., fun=fun@entry=..., args=..., rval=..., rval@entry=...) at /usr/src/debug/mozjs91-91.13.0-1.fc36.x86_64/dist/include/js/RootingAPI.h:1193
#24 0x00007fe958efcd92 in JS::Call (rval=..., args=..., fun=..., thisObj=..., cx=<optimized out>) at /usr/include/mozjs-91/jsapi.h:1156
#25 Gjs::Closure::invoke (this=0x561ef6b351b0, this_obj=..., args=..., retval=...) at ../gi/closure.cpp:184
#26 0x00007fe958f02227 in GjsCallbackTrampoline::callback_closure_inner (result=0x7ffd516cd110, c_args_offset=1, n_args=1, ret_type=0x7ffd516ccd00, args=0x7ffd516ccf70, rval=..., this_object=..., context=0x561ef65723a0, this=0x561ef6b351b0) at ../gi/function.cpp:511
#27 GjsCallbackTrampoline::callback_closure (this=0x561ef6b351b0, args=0x7ffd516ccf70, result=0x7ffd516cd110) at ../gi/function.cpp:375
#28 0x00007fe958f0316f in GjsCallbackTrampoline::initialize()::{lambda(ffi_cif*, void*, void**, void*)#1}::_FUN(ffi_cif*, void*, void**, void*) () at ../gi/function.cpp:732
#29 0x00007fe958815322 in ffi_closure_unix64_inner (cif=<optimized out>, fun=<optimized out>, user_data=<optimized out>, rvalue=<optimized out>, reg_args=<optimized out>, argp=0x7ffd516cd140 " ") at ../src/x86/ffi64.c:878
#30 0x00007fe958815968 in ffi_closure_unix64 () at ../src/x86/unix64.S:304
#31 0x00007fe958dd8c28 in _clutter_marshal_BOOLEAN__BOXEDv (closure=0x561ef6521620, return_value=0x7ffd516cd290, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x561ef6504190) at clutter/clutter/clutter-marshal.c:130
#32 0x00007fe959f58b79 in _g_closure_invoke_va (param_types=<optimized out>, n_params=<optimized out>, args=0x7ffd516cd340, instance=<optimized out>, return_value=<optimized out>, closure=0x561ef6521620) at ../gobject/gclosure.c:893
#33 g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7ffd516cd340) at ../gobject/gsignal.c:3406
#34 0x00007fe959f58cb3 in g_signal_emit (instance=instance@entry=0x561ef6b6a920, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3553
#35 0x00007fe958ded4f2 in clutter_actor_event (actor=0x561ef6b6a920, event=0x561ef781d4a0, capture=0) at ../clutter/clutter/clutter-actor.c:12449
#36 0x00007fe958df994b in _clutter_actor_handle_event (self=<optimized out>, root=0x561ef6196860, event=0x561ef781d4a0) at ../clutter/clutter/clutter-actor.c:19163
#37 0x00007fe958e24909 in emit_event_chain (event=0x561ef781d4a0, target=0x561ef6b6a920) at ../clutter/clutter/clutter-main.c:681
#38 emit_event (event=<optimized out>, target=<optimized out>) at ../clutter/clutter/clutter-main.c:699
#39 _clutter_process_event_details (context=0x561ef63b2a50, event=0x561ef781d4a0, stage=<optimized out>) at ../clutter/clutter/clutter-main.c:899
#40 _clutter_process_event (event=0x561ef781d4a0) at ../clutter/clutter/clutter-main.c:989
#41 0x00007fe958e3c220 in _clutter_stage_queue_event (stage=0x561ef6196860, event=0x561ef781d4a0, copy_event=1) at ../clutter/clutter/clutter-stage.c:623
#42 0x00007fe958a7c900 in clutter_source_dispatch (source=0x561ef6506fc0, callback=<optimized out>, user_data=<optimized out>) at ../src/backends/meta-
#43 0x00007fe95993dfaf in g_main_dispatch (context=0x561ef61a61c0) at ../glib/gmain.c:3417
#44 g_main_context_dispatch (context=0x561ef61a61c0) at ../glib/gmain.c:4135
#45 0x00007fe9599932c8 in g_main_context_iterate.constprop.0 (context=0x561ef61a61c0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized 
#46 0x00007fe95993d6cf in g_main_loop_run (loop=0x561ef74e1b30) at ../glib/gmain.c:4411
#47 0x00007fe958ad7e49 in meta_context_run_main_loop (context=context@entry=0x561ef61a10c0, error=error@entry=0x7ffd516cd700) at ../src/core/meta-
#48 0x0000561ef4819e27 in main (argc=<optimized out>, argv=<optimized out>) at ../src/main.c:566

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

Merge request reports