From cc7bb29579bfb755f43b731b9ce4490fc82eb6e1 Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Wed, 3 Dec 2014 18:04:50 +0300 Subject: [PATCH] 8024626: CTW CRASH: SIGSEGV in ctw/jre/lib/rt_jar/preloading_1 and ctw/jre/lib/rt_jar/sun_awt_X11_ListHelper Reviewed-by: azvegint, alexsch --- .../unix/classes/sun/awt/X11/XToolkit.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java index 4ed9439bb03..4ecc144880d 100644 --- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java @@ -103,11 +103,11 @@ public final class XToolkit extends UNIXToolkit implements Runnable { static TreeMap winMap = new TreeMap<>(); static HashMap specialPeerMap = new HashMap<>(); static HashMap> winToDispatcher = new HashMap<>(); - private static long _display; static UIDefaults uidefaults; - static X11GraphicsEnvironment localEnv; - static X11GraphicsDevice device; - static final X11GraphicsConfig config; + static final X11GraphicsEnvironment localEnv; + private static final X11GraphicsDevice device; + private static final X11GraphicsConfig config; + private static final long display; static int awt_multiclick_time; static boolean securityWarningEnabled; @@ -118,15 +118,16 @@ public final class XToolkit extends UNIXToolkit implements Runnable { static { initSecurityWarning(); if (GraphicsEnvironment.isHeadless()) { + localEnv = null; + device = null; config = null; + display = 0; } else { localEnv = (X11GraphicsEnvironment) GraphicsEnvironment .getLocalGraphicsEnvironment(); device = (X11GraphicsDevice) localEnv.getDefaultScreenDevice(); - config = (X11GraphicsConfig) (device.getDefaultConfiguration()); - if (device != null) { - _display = device.getDisplay(); - } + config = (X11GraphicsConfig) device.getDefaultConfiguration(); + display = device.getDisplay(); setupModifierMap(); initIDs(); setBackingStoreType(); @@ -197,10 +198,18 @@ public final class XToolkit extends UNIXToolkit implements Runnable { } } - static Object displayLock = new Object(); - + /** + * Returns the X11 Display of the default screen device. + * + * @return X11 Display + * @throws AWTError thrown if local GraphicsEnvironment is null, which + * means we are in the headless environment + */ public static long getDisplay() { - return _display; + if (localEnv == null) { + throw new AWTError("Local GraphicsEnvironment must not be null"); + } + return display; } public static long getDefaultRootWindow() {