GNOME Bugzilla – Bug 357248
[blocked] Insert F in Gaim crashes Gaim, causes Insert to become "sticky"
Last modified: 2006-09-26 21:26:23 UTC
Please describe the problem: If you are in a chat window, in the text box where you type a message, pressing Insert F to obtain text attributes results in the following: 1. Gaim crashing 2. Orca behaving as if the Insert key were being pressed, even though it is not Steps to reproduce: 1. Launch Orca 2. Launch Gaim 3. Start a chat with one of your "buddies" 4. In the text box where messages are to be typed, press Insert F. 5. Press Alt F1 for the Applications menu 6. Press Down Arrow Actual results: Upon executing step 4, Gaim crashes. Upon executing step 6, Orca announces "lower" rather than moving you down within the Applications menu. Expected results: Gaim wouldn't crash, and the Insert key would not become "sticky." Does this happen every time? Yes Other information: Ubuntu Edgy Eft, Orca from CVS HEAD, Gaim 2.0 beta 3.1 (the package that is included with Edgy).
I have submitted a bug (156377) against gaim on SourceForge for this. See: http://sourceforge.net/tracker/index.php?func=detail&aid=1563774&group_id=235&atid=100235 The gaim stack trace on Solaris with gaim v2.0.0beta2 is: t@1 (l@1) signal ABRT (Abort) in _lwp_kill at 0xfef68697 0xfef68697: _lwp_kill+0x0007: jae _lwp_kill+0x15 [ 0xfef686a5, .+0xe ] (dbx) where current thread: t@1 =>[1] _lwp_kill(0x1, 0x6), at 0xfef68697 [2] _thr_kill(0x1, 0x6), at 0xfef65b40 [3] raise(0x6), at 0xfef2dd04 [4] abort(0x8747180, 0x0, 0xfee33eb4, 0x8045e84, 0xfecc5ee6, 0x8538838), at 0xfef10108 [5] g_logv(0x0, 0x4, 0xfc6c1f90, 0x80463bc), at 0xfedd1238 [6] g_log(0x0, 0x4, 0xfc6c1f90, 0xfc6c2000, 0x46f, 0xfc6c1f48), at 0xfedd1265 [7] atk_text_attribute_get_value(0x16, 0x3), at 0xfc6bf3f2 [8] gail_misc_add_to_attr_set(0x872d488, 0x8753c60, 0x16), at 0xfcaf2ce8 [9] gail_text_view_get_default_attributes(0x83d0ee0), at 0xfc77f56b [10] atk_text_get_default_attributes(0x83d0ee0, 0x804665c, 0x8046510, 0x8046598, 0x8046464, 0xfc1c7f52), at 0xfc6be99d [11] impl_getDefaultAttributes(0x84c1164, 0x804665c), at 0xfc1cf336 [12] _ORBIT_skel_small_Accessibility_Text_getDefaultAttributes(0x84c1164, 0x80464f0, 0x0, 0x8046510, 0x804665c, 0xfc1cf30c), at 0xfc1c7f52 [13] ORBit_POAObject_invoke(0x87dbdb8, 0x80464f0, 0x0, 0x8046510, 0x8046598, 0x804665c), at 0xfc12eb79 [14] ORBit_OAObject_invoke(0x87dbdb8, 0x80464f0, 0x0, 0x8046510, 0x8046598, 0x804665c), at 0xfc1330a8 [15] ORBit_small_invoke_adaptor(0x87dbdb8, 0x8753348, 0xfc1e82d0, 0x8046598, 0x804665c), at 0xfc12078d [16] ORBit_POAObject_handle_request(0x87dbdb8, 0x8753c24, 0x0, 0x0, 0x0, 0x8753348, 0x804665c), at 0xfc12efc0 [17] ORBit_POAObject_invoke_incoming_request(0x87dbdb8, 0x8753348, 0x804665c), at 0xfc12f3d0 [18] ORBit_POA_handle_request(0x817ecf8, 0x8753348, 0x8753360), at 0xfc12f865 [19] ORBit_handle_request(0x817e1b8, 0x8753348), at 0xfc132e70 [20] giop_connection_handle_input(0x8480dd8), at 0xfc11d97d [21] link_connection_io_handler(0x0, 0x1, 0x8480dd8), at 0xfc1391f6 [22] link_source_dispatch(0x8550270, 0xfc1391a0, 0x8480dd8), at 0xfc13adf6 [23] g_main_dispatch(0x8168278), at 0xfedc9690 [24] g_main_context_dispatch(0x8168278), at 0xfedca779 [25] g_main_context_iterate(0x8168278, 0x1, 0x1, 0x8156558), at 0xfedcab99 [26] g_main_loop_run(0x83d6588), at 0xfedcb19e [27] gtk_main(0x8046ef4, 0x8046da0, 0xfeffa840, 0x812c630, 0x1, 0x0), at 0xfc9113f7 [28] main(0x1, 0x8046de4, 0x8046dec), at 0x80f86d2 (dbx) Orca is having problems at this point because it's getting COMM_FAILURE's: Traceback (most recent call last):
+ Trace 73015
consumed = self._function(script, inputEvent)
defAttributes = text.getDefaultAttributes() COMM_FAILURE
There might be something we can do here to get it to fail more gracefully.
Created attachment 73391 [details] [review] Patch to allieviate the "sticky" problem. There is an Orca problem here whereby if a COMM_FAILURE occured because of a user command (such as Insert-f in this case), then Orca gets stuck in a state where orca._orcaModifierPressed is True and this has an adverse affect on everything that's typed afterwards. Pressing and releasing the Insert key gets Orca out of the sticky state. The attached patch does the same. The only concern from me (and a question to you Will) is whether we want to do this somewhere else within the Orca source code.
I've closed out the gaim SF bug on this. The problem appears to be in atk. I built atk and gail with debug on, and reran gaim with Orca. I get the following stack trace. t@1 (l@1) stopped in abort at 0xfd59003b 0xfd59003b: abort : pushl %ebp Current function is atk_text_attribute_get_value 1131 g_assert (index >= 0 && index < 3); (dbx) where current thread: t@1 [1] abort(0x804663c, 0x0, 0xfd933eb4, 0x9, 0xfd6326a0, 0x8045f0c), at 0xfd59003b [2] g_logv(0x0, 0x4, 0xfeeffcdc, 0x804635c), at 0xfd8d1238 [3] g_log(0x0, 0x4, 0xfeeffcdc, 0xfef14b6c, 0x46b, 0xfef14b78), at 0xfd8d1265 =>[4] atk_text_attribute_get_value(attr = ATK_TEXT_ATTR_WRAP_MODE, index = 3), line 1131 in "atktext.c" [5] gail_misc_add_to_attr_set(attrib_set = 0x88b2cd8, attrs = 0x88d02d0, attr = ATK_TEXT_ATTR_WRAP_MODE), line 632 in "gailmisc.c" [6] gail_text_view_get_default_attributes(text = 0x856e150), line 724 in "gailtextview.c" [7] atk_text_get_default_attributes(text = 0x856e150), line 640 in "atktext.c" [8] impl_getDefaultAttributes(0x857fb64, 0x804663c), at 0xfbfcf336 [9] _ORBIT_skel_small_Accessibility_Text_getDefaultAttributes(0x857fb64, 0x80464d0, 0x0, 0x80464f0, 0x804663c, 0xfbfcf30c), at 0xfbfc7f52 [10] ORBit_POAObject_invoke(0x86c5f50, 0x80464d0, 0x0, 0x80464f0, 0x8046578, 0x804663c), at 0xfbf3eb79 [11] ORBit_OAObject_invoke(0x86c5f50, 0x80464d0, 0x0, 0x80464f0, 0x8046578, 0x804663c), at 0xfbf430a8 [12] ORBit_small_invoke_adaptor(0x86c5f50, 0x88d01e8, 0xfbfe82d0, 0x8046578, 0x804663c), at 0xfbf3078d [13] ORBit_POAObject_handle_request(0x86c5f50, 0x88d0294, 0x0, 0x0, 0x0, 0x88d01e8, 0x804663c), at 0xfbf3efc0 [14] ORBit_POAObject_invoke_incoming_request(0x86c5f50, 0x88d01e8, 0x804663c), at 0xfbf3f3d0 [15] ORBit_POA_handle_request(0x8278880, 0x88d01e8, 0x88d0200), at 0xfbf3f865 [16] ORBit_handle_request(0x827af08, 0x88d01e8), at 0xfbf42e70 [17] giop_connection_handle_input(0x8640440), at 0xfbf2d97d [18] link_connection_io_handler(0x0, 0x1, 0x8640440), at 0xfbf491f6 [19] link_source_dispatch(0x86bc050, 0xfbf491a0, 0x8640440), at 0xfbf4adf6 [20] g_main_dispatch(0x8264e78), at 0xfd8c9690 [21] g_main_context_dispatch(0x8264e78), at 0xfd8ca779 [22] g_main_context_iterate(0x8264e78, 0x1, 0x1, 0x82488a8), at 0xfd8cab99 [23] g_main_loop_run(0x84d9590), at 0xfd8cb19e [24] gtk_main(0x8046ef4, 0x8046da0, 0xfeffa840, 0xfd5e6d30, 0x0, 0x82420d4), at 0xfed113f7 [25] main(argc = 1, argv = 0x8046de4), line 765 in "gtkmain.c" (dbx) print index index = 3 (dbx) frame 5 Current function is gail_misc_add_to_attr_set 632 value = g_strdup (atk_text_attribute_get_value (attr, attrs->wrap_mode)); (dbx) print *attrs *attrs = { refcount = 1U appearance = { bg_color = { pixel = 16777215U red = 65535U green = 65535U blue = 65535U } fg_color = { pixel = 0 red = 0 green = 0 blue = 0 } bg_stipple = (nil) fg_stipple = (nil) rise = 0 padding1 = (nil) underline = 0 strikethrough = 0 draw_bg = 0 inside_selection = 0 is_text = 0 pad1 = 0 pad2 = 0 pad3 = 0 pad4 = 0 } justification = GTK_JUSTIFY_LEFT direction = GTK_TEXT_DIR_LTR font = 0x88ce740 font_scale = 1.0 left_margin = 2 indent = 0 right_margin = 2 pixels_above_lines = 0 pixels_below_lines = 5 pixels_inside_wrap = 0 tabs = (nil) wrap_mode = GTK_WRAP_WORD_CHAR language = 0x8319060 pg_bg_color = (nil) invisible = 0 bg_full_height = 0 editable = 1U realized = 0 pad1 = 0 pad2 = 0 pad3 = 0 pad4 = 0 } (dbx) print (int) attrs->wrap_mode (int ) attrs->wrap_mode = 3 (dbx) quit You'll notice that attrs->wrape_mode is 3 but there is a specific test in atktext.c at about line 1131: case ATK_TEXT_ATTR_WRAP_MODE: g_assert (index >= 0 && index < 3); That would appear to be a problem. I'll open up an atk bug against this.
I've opened atk bug #357847 on this problem. Adjusted summary to show that this one is blocked by that one.
I've just tested this against the CVS version of atk. Works great. Closing as FIXED.