<AWT Dev> Request for review: Crash on XIM server restart

Omair Majid omajid at redhat.com
Thu Sep 23 07:02:47 PDT 2010


Hi Artem,

On 09/23/2010 05:33 AM, Artem Ananiev wrote:
> I'm not an i18n expert, just would like to understand the problem and
> the fix.
>

Naoto Sato was kind enough to review the patch:
http://mail.openjdk.java.net/pipermail/i18n-dev/2010-September/000221.html

> Could you provide the stack trace of the crash, please?
>

Sure. I am attaching the GtkJTextFieldTest.java (a reproducer) and the 
backtrace I obtained. Here are the steps I have to take to reproduce the 
crash:
1. Start an XIM server (I use ibus in gnome)
2. Run the reproducer and type something in one of the JTextFields
3. Restart the XIM server (for ibus, this requires right clicking on the 
icon in the system tray and selecting restart).
4. Switch back to the java program and try to type something again.

> As I understand, the reason of calling getX11InputMethodData is that you
> need to destroy "pX11IMData" and set the corresponding field in Java to
> null, right?
>

Yeah. The code already checks (in getX11InputMethodData) if the XIM 
server has stopped. It can also automatically reconnect to the XIM 
server too. the problem is that if the XIM server is stopped and then 
restarted, X calls OpenXIMCallback which set XIMim to non null, skipping 
the check in getX11IMInputMethodData. Since pX11IMData does not 
correspond to the new X11im, the program crashes.

I posted an updated cr with comments clarifying the operation.
http://cr.openjdk.java.net/~omajid/webrevs/crash-on-xim-server-restart/webrev.01/

Cheers,
Omair

>
> On 9/16/2010 11:58 PM, Omair Majid wrote:
>> Hi,
>>
>> While looking at the bug filed at
>> https://bugzilla.redhat.com/show_bug.cgi?id=572147, I noticed that Java
>> applications crash if IBus (an X input server) is restarted.
>>
>> The webrev is at
>> http://cr.openjdk.java.net/~omajid/webrevs/crash-on-xim-server-restart/webrev.00/
>>
>>
>>
>> The code in awt_InputMethod.c guards against the XIM server going away,
>> but does not guard against it appearing again. When the XIM server is
>> restarted, the X server can send async requests to call OpenXIMCallback
>> in Java automatically:
>> (gdb) bt
>> #0 OpenXIMCallback (display=<value optimized out>,
>> client_data=<value optimized out>, call_data=<value optimized out>)
>> at ../../../src/solaris/native/sun/awt/awt_InputMethod.c:1464
>> #1 0x00000036b406dc4f in _XimFilterPropertyNotify
>> (display=0x7f503c0df300,
>> window=<value optimized out>, event=<value optimized out>,
>> client_data=<value optimized out>) at imInsClbk.c:126
>> #2 0x00007f4ff24f0f3f in Java_sun_awt_X11_XlibWrapper_XFilterEvent (
>> env=<value optimized out>, clazz=<value optimized out>,
>> ptr=<value optimized out>, window=<value optimized out>)
>> at ../../../src/solaris/native/sun/xawt/XlibWrapper.c:486
>> #3 0x00007f5039010f50 in ?? ()
>> #4 0x00007f5039005953 in ?? ()
>> #5 0x0000000000000000 in ?? ()
>>
>> This causes the X11im pointer to get initialized and the checks in
>> getX11InputMethodData are escaped. The patch simply makes sure that the
>> checks are not escaped by calling getX11InputMethodData in
>> DestroyXIMCallback.
>>
>> Any thoughts or comments?
>>
>> Cheers,
>> Omair

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: stack.trace
Url: http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20100923/67cd2ea9/stack.trace 
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: GtkJTextFieldTest.java
Url: http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20100923/67cd2ea9/GtkJTextFieldTest.java 


More information about the awt-dev mailing list