After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 693907 - Switching input source in message-tray input entry -> gnome-shell crashes
Switching input source in message-tray input entry -> gnome-shell crashes
Status: RESOLVED FIXED
Product: gnome-shell
Classification: Core
Component: message-tray
3.7.x
Other Linux
: Normal critical
: ---
Assigned To: gnome-shell-maint
gnome-shell-maint
Depends on:
Blocks:
 
 
Reported: 2013-02-15 17:17 UTC by sangu
Modified: 2013-03-04 17:35 UTC
See Also:
GNOME target: 3.8
GNOME version: ---


Attachments
status/keyboard: Don't allow the switcher in the message tray (2.22 KB, patch)
2013-03-04 13:47 UTC, Rui Matos
committed Details | Review

Description sangu 2013-02-15 17:17:32 UTC
$gdb gnome-shell coredump
[...]
Core was generated by `/usr/bin/gnome-shell'.
Program terminated with signal 5, Trace/breakpoint trap.
  • #0 g_logv
    at gmessages.c line 981
  • #0 g_logv
    at gmessages.c line 981
  • #1 g_log
    at gmessages.c line 1010
  • #2 _gdk_x11_display_error_event
    from /lib64/libgdk-3.so.0
  • #3 gdk_x_error
    from /lib64/libgdk-3.so.0
  • #4 _XError
    from /lib64/libX11.so.6
  • #5 handle_error
    from /lib64/libX11.so.6
  • #6 handle_response
    from /lib64/libX11.so.6
  • #7 _XReply
    from /lib64/libX11.so.6
  • #8 XIGetClientPointer
    from /lib64/libXi.so.6
  • #9 gdk_x11_device_manager_xi2_get_client_pointer
    from /lib64/libgdk-3.so.0
  • #10 shell_global_sync_pointer
    at shell-global.c line 1344
  • #11 ffi_call_unix64
    from /lib64/libffi.so.6
  • #12 ffi_call
    from /lib64/libffi.so.6
  • #13 gjs_invoke_c_function
    at gi/function.c line 893
  • #14 function_call
    at gi/function.c line 1202
  • #15 CallJSNative
    at jscntxtinlines.h line 701
  • #16 js::Invoke
    at jsinterp.cpp line 696
  • #17 js::Interpret
    at jsinterp.cpp line 4810
  • #18 js::RunScript
    at jsinterp.cpp line 653
  • #19 js::Invoke
    at jsinterp.cpp line 740
  • #20 js_fun_apply
    at jsfun.cpp line 2205
  • #21 CallJSNative
    at jscntxtinlines.h line 701
  • #22 js::Interpret
    at jsinterp.cpp line 4799
  • #23 js::RunScript
    at jsinterp.cpp line 653
  • #24 js::Invoke
    at jsinterp.cpp line 740
  • #25 js_fun_apply
    at jsfun.cpp line 2205
  • #26 CallJSNative
    at jscntxtinlines.h line 701
  • #27 js::Interpret
    at jsinterp.cpp line 4799
  • #28 js::RunScript
    at jsinterp.cpp line 653
  • #29 js::Invoke
    at jsinterp.cpp line 740
  • #30 js_fun_apply
    at jsfun.cpp line 2205
  • #31 CallJSNative
    at jscntxtinlines.h line 701
  • #32 js::Interpret
    at jsinterp.cpp line 4799
  • #33 js::RunScript
    at jsinterp.cpp line 653
  • #34 js::Invoke
  • #35 js::CallOrConstructBoundFunction
    at jsfun.cpp line 2319
  • #36 CallJSNative
    at jscntxtinlines.h line 701
  • #37 js::Invoke
    at jsinterp.cpp line 703
  • #38 js::ExternalInvoke
    at jsinterp.cpp line 863
  • #39 JS_CallFunctionValue
    at jsapi.cpp line 5145
  • #40 gjs_call_function_value
    at gjs/jsapi-util.c line 708
  • #41 gjs_closure_invoke
    at gi/closure.c line 278
  • #42 closure_marshal
  • #43 g_closure_invoke
    at gclosure.c line 777
  • #44 signal_emit_unlocked_R
    at gsignal.c line 3566
  • #45 g_signal_emit_valist
    at gsignal.c line 3324
  • #46 g_signal_emit
    at gsignal.c line 3370
  • #47 clutter_actor_event
    from /lib64/libclutter-1.0.so.0
  • #48 _clutter_actor_handle_event
    from /lib64/libclutter-1.0.so.0
  • #49 _clutter_process_event
    from /lib64/libclutter-1.0.so.0
  • #50 _clutter_stage_process_queued_events
    from /lib64/libclutter-1.0.so.0
  • #51 clutter_clock_dispatch
    from /lib64/libclutter-1.0.so.0
  • #52 g_main_dispatch
    at gmain.c line 3054
  • #53 g_main_context_dispatch
    at gmain.c line 3630
  • #54 g_main_context_iterate
    at gmain.c line 3701
  • #55 g_main_loop_run
    at gmain.c line 3895
  • #56 meta_run
    from /lib64/libmutter.so.0
  • #57 main
    at main.c line 430

1. click message-tray 
2. click switch input source key ( like super+space or ctrl+space)
3. click anything place with mouse in ibus-osd state.

gnome-shell-3.7.5-2.fc19.x86_64
gjs-1.35.4-1.fc19.x86_64
js-1.8.5-12.fc19.x86_64
Comment 1 Matthias Clasen 2013-02-15 23:17:55 UTC
thats bad. marking as blocker
Comment 2 Jasper St. Pierre (not reading bugmail) 2013-02-15 23:20:00 UTC
It seems this is an X issue. Can you run:

    GDK_SYNCHRONOUS=true gnome-shell --sync --replace

and get the real X error from stdout / stderr?
Comment 3 sangu 2013-02-16 02:25:52 UTC
$ GDK_SYNCHRONOUS=true gnome-shell --sync --replace
      JS LOG: GNOME Shell started at Sat Feb 16 2013 11:22:31 GMT+0900 (KST)

(gnome-shell:17148): Clutter-WARNING **: ./clutter-actor.c:9704: Actor '<panelBox>[<StBoxLayout>:0x2ce8190]' tried to allocate a size of 1920.00 x -1.00
창 관리자 주의: Log level 8: atk_object_notify_state_change: assertion `ATK_IS_OBJECT (accessible)' failed
창 관리자 주의: Log level 8: atk_object_notify_state_change: assertion `ATK_IS_OBJECT (accessible)' failed

(gnome-shell:17148): Clutter-CRITICAL **: clutter_x11_get_stage_window: assertion `CLUTTER_IS_STAGE (stage)' failed
창 관리자 주의: Log level 6: The program 'gnome-shell' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadWindow (invalid Window parameter)'.
  (Details: serial 29672 error_code 3 request_code 2 minor_code 0)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the GDK_SYNCHRONIZE environment
   variable to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)
추적/중단점 함정 (core dumped)
Comment 4 sangu 2013-02-16 02:41:23 UTC
(In reply to comment #3)

Core was generated by `gnome-shell --sync --replace'.
Program terminated with signal 5, Trace/breakpoint trap.
  • #0 g_logv
    at gmessages.c line 981
  • #0 g_logv
    at gmessages.c line 981
  • #1 g_log
    at gmessages.c line 1010
  • #2 _gdk_x11_display_error_event
    from /lib64/libgdk-3.so.0
  • #3 gdk_x_error
    from /lib64/libgdk-3.so.0
  • #4 _XError
    at XlibInt.c line 1583
  • #5 handle_error
    at xcb_io.c line 212
  • #6 handle_response
    at xcb_io.c line 324
  • #7 _XReply
    at xcb_io.c line 626
  • #8 XSync
    at Sync.c line 44
  • #9 _XSyncFunction
    at Synchro.c line 35
  • #10 XUndefineCursor
    at UndefCurs.c line 46
  • #11 st_entry_set_cursor
    at st/st-entry.c line 639
  • #12 st_entry_crossing_event
    at st/st-entry.c line 647
  • #13 _clutter_marshal_BOOLEAN__BOXED
    at clutter-marshal.c line 85
  • #14 g_closure_invoke
    at gclosure.c line 777
  • #15 signal_emit_unlocked_R
    at gsignal.c line 3604
  • #16 g_signal_emit_valist
    at gsignal.c line 3324
  • #17 g_signal_emit
    at gsignal.c line 3370
  • #18 clutter_actor_event
  • #19 _clutter_actor_handle_event
    at ./clutter-actor.c line 19993
  • #20 emit_event_chain
    at ./clutter-main.c line 2290
  • #21 emit_keyboard_event
    at ./clutter-main.c line 2361
  • #22 _clutter_process_event_details
    at ./clutter-main.c line 2461
  • #23 _clutter_process_event
    at ./clutter-main.c line 2801
  • #24 _clutter_input_device_set_actor
    at ./clutter-input-device.c line 669
  • #25 _clutter_input_device_update
    at ./clutter-input-device.c line 900
  • #26 _clutter_process_event_details
    at ./clutter-main.c line 2611
  • #27 _clutter_process_event
  • #28 _clutter_stage_process_queued_events
    at ./clutter-stage.c line 1026
  • #29 master_clock_process_events
    at ./clutter-master-clock.c line 283
  • #30 clutter_clock_dispatch
    at ./clutter-master-clock.c line 514
  • #31 g_main_dispatch
    at gmain.c line 3054
  • #32 g_main_context_dispatch
    at gmain.c line 3630
  • #33 g_main_context_iterate
    at gmain.c line 3701
  • #34 g_main_loop_run
    at gmain.c line 3895
  • #35 meta_run
    from /lib64/libmutter.so.0
  • #36 main
    at main.c line 430

xorg-x11-server-1.13.99.902-1.20130215.fc19(1.14 rc2)
libX11-1.5.0-3.fc18.x86_64
clutter-1.13.4-4.fc19.x86_64
Comment 5 sangu 2013-02-16 02:53:42 UTC
After downgrading to xorg-x11-server-1.13.2

Core was generated by `/usr/bin/gnome-shell'.
Program terminated with signal 5, Trace/breakpoint trap.
  • #0 g_logv
    at gmessages.c line 981
  • #0 g_logv
    at gmessages.c line 981
  • #1 g_log
    at gmessages.c line 1010
  • #2 _gdk_x11_display_error_event
    at gdkdisplay-x11.c line 2415
  • #3 gdk_x_error
    at gdkmain-x11.c line 303
  • #4 _XError
    at XlibInt.c line 1583
  • #5 handle_error
    at xcb_io.c line 212
  • #6 handle_response
    at xcb_io.c line 324
  • #7 _XEventsQueued
    at xcb_io.c line 363
  • #8 XPending
    at Pending.c line 55
  • #9 gdk_check_xpending
    at gdkeventsource.c line 266
  • #10 gdk_event_source_check
  • #11 g_main_context_check
    at gmain.c line 3545
  • #12 g_main_context_iterate
    at gmain.c line 3698
  • #13 g_main_loop_run
    at gmain.c line 3895
  • #14 meta_run
    from /lib64/libmutter.so.0
  • #15 main
    at main.c line 430

Comment 6 Matthias Clasen 2013-03-02 14:54:00 UTC
I don't get a crash anymore, but I get a stuck osd situation, if I do the following:

1) Super-M
2) Super-Space

now the message tray and the osd are both visible, and the osd does not react to further Super-Space or Space key presses. I have to dismiss the message tray before I can get rid of the OSD.

Rui, can you have a look ?
Comment 7 Rui Matos 2013-03-04 13:46:52 UTC
The problem is that SwitcherPopup relies on being able to pushModal(), setting the stage input mode to FULLSCREEN, and then doing regular event processing on the actor it adds to uiGroup. But MessageTray uses GrabHelper which sets up a 'captured-event' handler on the stage and thus gets all events itself.

The only way I can see to make this work is having a global GrabHelper instance and port every use of pushModal() to use that instance instead. It goes without saying that I don't feel comfortable doing that at this point in the release cycle.

I think that for 3.8 we should just prevent the switcher from working in the message tray which is far from ideal, I admit, since we still have the chat bubbles in there...
Comment 8 Rui Matos 2013-03-04 13:47:19 UTC
Created attachment 237983 [details] [review]
status/keyboard: Don't allow the switcher in the message tray

SwitcherPopup relies on being able to pushModal(), setting the stage
input mode to FULLSCREEN, and then doing regular event processing on
the actor it adds to uiGroup. But MessageTray uses GrabHelper which
sets up a 'captured-event' handler on the stage and thus gets all
events itself.

This, of course, breaks the switcher if it's brought up in the message
tray so, for now, we'll just prevent it from being used there.
Comment 9 Florian Müllner 2013-03-04 14:06:25 UTC
Review of attachment 237983 [details] [review]:

Looks good.
Comment 10 Rui Matos 2013-03-04 17:35:44 UTC
Attachment 237983 [details] pushed as e5ca53e - status/keyboard: Don't allow the switcher in the message tray