From dfead8558ba84d8203916a5c08e2f7473de5d8e4 Mon Sep 17 00:00:00 2001 From: dcherepanov Date: Fri, 26 Jun 2015 00:00:52 +0400 Subject: [PATCH] 8080246: JNLP app cannot be launched due to deadlock Reviewed-by: alexsch, azvegint Contributed-by: daniil.x.titov@oracle.com --- src/share/classes/sun/awt/SunToolkit.java | 35 ++++++++++++++--------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/share/classes/sun/awt/SunToolkit.java b/src/share/classes/sun/awt/SunToolkit.java index 737c8c6ee..62696453a 100644 --- a/src/share/classes/sun/awt/SunToolkit.java +++ b/src/share/classes/sun/awt/SunToolkit.java @@ -715,16 +715,19 @@ public abstract class SunToolkit extends Toolkit } - static final SoftCache imgCache = new SoftCache(); + static final SoftCache fileImgCache = new SoftCache(); + + static final SoftCache urlImgCache = new SoftCache(); static Image getImageFromHash(Toolkit tk, URL url) { checkPermissions(url); - synchronized (imgCache) { - Image img = (Image)imgCache.get(url); + synchronized (urlImgCache) { + String key = url.toString(); + Image img = (Image)urlImgCache.get(key); if (img == null) { try { img = tk.createImage(new URLImageSource(url)); - imgCache.put(url, img); + urlImgCache.put(key, img); } catch (Exception e) { } } @@ -735,12 +738,12 @@ public abstract class SunToolkit extends Toolkit static Image getImageFromHash(Toolkit tk, String filename) { checkPermissions(filename); - synchronized (imgCache) { - Image img = (Image)imgCache.get(filename); + synchronized (fileImgCache) { + Image img = (Image)fileImgCache.get(filename); if (img == null) { try { img = tk.createImage(new FileImageSource(filename)); - imgCache.put(filename, img); + fileImgCache.put(filename, img); } catch (Exception e) { } } @@ -758,28 +761,29 @@ public abstract class SunToolkit extends Toolkit protected Image getImageWithResolutionVariant(String fileName, String resolutionVariantName) { - synchronized (imgCache) { + synchronized (fileImgCache) { Image image = getImageFromHash(this, fileName); if (image instanceof MultiResolutionImage) { return image; } Image resolutionVariant = getImageFromHash(this, resolutionVariantName); image = createImageWithResolutionVariant(image, resolutionVariant); - imgCache.put(fileName, image); + fileImgCache.put(fileName, image); return image; } } protected Image getImageWithResolutionVariant(URL url, URL resolutionVariantURL) { - synchronized (imgCache) { + synchronized (urlImgCache) { Image image = getImageFromHash(this, url); if (image instanceof MultiResolutionImage) { return image; } Image resolutionVariant = getImageFromHash(this, resolutionVariantURL); image = createImageWithResolutionVariant(image, resolutionVariant); - imgCache.put(url, image); + String key = url.toString(); + urlImgCache.put(key, image); return image; } } @@ -884,8 +888,13 @@ public abstract class SunToolkit extends Toolkit return null; } - protected static boolean imageCached(Object key) { - return imgCache.containsKey(key); + protected static boolean imageCached(String fileName) { + return fileImgCache.containsKey(fileName); + } + + protected static boolean imageCached(URL url) { + String key = url.toString(); + return urlImgCache.containsKey(key); } protected static boolean imageExists(String filename) { -- GitLab