提交 a68d5dbb 编写于 作者: Y yan

6834525: PIT: RowToleranceTransitivityTest test fail with crash on rhel4 x86 and rhel 5x86

Summary: do not try to use released XKB resources
Reviewed-by: art
上级 ee769824
...@@ -29,6 +29,9 @@ package sun.awt.X11; ...@@ -29,6 +29,9 @@ package sun.awt.X11;
import java.util.Hashtable; import java.util.Hashtable;
import sun.misc.Unsafe; import sun.misc.Unsafe;
import java.util.logging.Level;
import java.util.logging.Logger;
public class XKeysym { public class XKeysym {
public static void main( String args[] ) { public static void main( String args[] ) {
...@@ -67,6 +70,7 @@ public class XKeysym { ...@@ -67,6 +70,7 @@ public class XKeysym {
static Hashtable<Integer, Long> javaKeycode2KeysymHash = new Hashtable<Integer, Long>(); static Hashtable<Integer, Long> javaKeycode2KeysymHash = new Hashtable<Integer, Long>();
static long keysym_lowercase = unsafe.allocateMemory(Native.getLongSize()); static long keysym_lowercase = unsafe.allocateMemory(Native.getLongSize());
static long keysym_uppercase = unsafe.allocateMemory(Native.getLongSize()); static long keysym_uppercase = unsafe.allocateMemory(Native.getLongSize());
private static Logger keyEventLog = Logger.getLogger("sun.awt.X11.kye.XKeysym");
public static char convertKeysym( long ks, int state ) { public static char convertKeysym( long ks, int state ) {
/* First check for Latin-1 characters (1:1 mapping) */ /* First check for Latin-1 characters (1:1 mapping) */
...@@ -107,8 +111,15 @@ public class XKeysym { ...@@ -107,8 +111,15 @@ public class XKeysym {
// clearly means that caller needs a so called primary keysym. // clearly means that caller needs a so called primary keysym.
mods ^= XConstants.ShiftMask; mods ^= XConstants.ShiftMask;
} }
XlibWrapper.XkbTranslateKeyCode(XToolkit.getXKBKbdDesc(), ev.get_keycode(), long kbdDesc = XToolkit.getXKBKbdDesc();
if( kbdDesc != 0 ) {
XlibWrapper.XkbTranslateKeyCode(kbdDesc, ev.get_keycode(),
mods, XlibWrapper.iarg1, XlibWrapper.larg3); mods, XlibWrapper.iarg1, XlibWrapper.larg3);
}else{
// xkb resources already gone
keyEventLog.fine("Thread race: Toolkit shutdown before the end of a key event processing.");
return 0;
}
//XXX unconsumed modifiers? //XXX unconsumed modifiers?
return Native.getLong(XlibWrapper.larg3); return Native.getLong(XlibWrapper.larg3);
} finally { } finally {
......
...@@ -2263,6 +2263,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable { ...@@ -2263,6 +2263,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
try { try {
if (awt_UseXKB_Calls && awt_XKBDescPtr != 0) { if (awt_UseXKB_Calls && awt_XKBDescPtr != 0) {
XlibWrapper.XkbFreeKeyboard(awt_XKBDescPtr, 0xFF, true); XlibWrapper.XkbFreeKeyboard(awt_XKBDescPtr, 0xFF, true);
awt_XKBDescPtr = 0;
} }
} finally { } finally {
awtUnlock(); awtUnlock();
......
...@@ -67,6 +67,9 @@ tojava package sun.awt.X11; ...@@ -67,6 +67,9 @@ tojava package sun.awt.X11;
tojava import java.util.Hashtable; tojava import java.util.Hashtable;
tojava import sun.misc.Unsafe; tojava import sun.misc.Unsafe;
tojava tojava
tojava import java.util.logging.Level;
tojava import java.util.logging.Logger;
tojava
tojava public class XKeysym { tojava public class XKeysym {
tojava tojava
tojava public static void main( String args[] ) { tojava public static void main( String args[] ) {
...@@ -105,6 +108,7 @@ tojava // Another use for reverse lookup: query keyboard state, for some key ...@@ -105,6 +108,7 @@ tojava // Another use for reverse lookup: query keyboard state, for some key
tojava static Hashtable<Integer, Long> javaKeycode2KeysymHash = new Hashtable<Integer, Long>(); tojava static Hashtable<Integer, Long> javaKeycode2KeysymHash = new Hashtable<Integer, Long>();
tojava static long keysym_lowercase = unsafe.allocateMemory(Native.getLongSize()); tojava static long keysym_lowercase = unsafe.allocateMemory(Native.getLongSize());
tojava static long keysym_uppercase = unsafe.allocateMemory(Native.getLongSize()); tojava static long keysym_uppercase = unsafe.allocateMemory(Native.getLongSize());
tojava private static Logger keyEventLog = Logger.getLogger("sun.awt.X11.kye.XKeysym");
tojava public static char convertKeysym( long ks, int state ) { tojava public static char convertKeysym( long ks, int state ) {
tojava tojava
tojava /* First check for Latin-1 characters (1:1 mapping) */ tojava /* First check for Latin-1 characters (1:1 mapping) */
...@@ -145,8 +149,15 @@ tojava // and don't want to speculate. But this particular case ...@@ -145,8 +149,15 @@ tojava // and don't want to speculate. But this particular case
tojava // clearly means that caller needs a so called primary keysym. tojava // clearly means that caller needs a so called primary keysym.
tojava mods ^= XConstants.ShiftMask; tojava mods ^= XConstants.ShiftMask;
tojava } tojava }
tojava XlibWrapper.XkbTranslateKeyCode(XToolkit.getXKBKbdDesc(), ev.get_keycode(), tojava long kbdDesc = XToolkit.getXKBKbdDesc();
tojava if( kbdDesc != 0 ) {
tojava XlibWrapper.XkbTranslateKeyCode(kbdDesc, ev.get_keycode(),
tojava mods, XlibWrapper.iarg1, XlibWrapper.larg3); tojava mods, XlibWrapper.iarg1, XlibWrapper.larg3);
tojava }else{
tojava // xkb resources already gone
tojava keyEventLog.fine("Thread race: Toolkit shutdown before the end of a key event processing.");
tojava return 0;
tojava }
tojava //XXX unconsumed modifiers? tojava //XXX unconsumed modifiers?
tojava return Native.getLong(XlibWrapper.larg3); tojava return Native.getLong(XlibWrapper.larg3);
tojava } finally { tojava } finally {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册