8080246: JNLP app cannot be launched due to deadlock

Reviewed-by: serb, vdrozdov
This commit is contained in:
Daniil Titov 2015-06-09 11:52:12 -07:00
parent 4411bdd3cc
commit 225ca2617b

View File

@ -651,16 +651,20 @@ public abstract class SunToolkit extends Toolkit
@SuppressWarnings("deprecation")
static final SoftCache imgCache = new SoftCache();
static final SoftCache fileImgCache = new SoftCache();
@SuppressWarnings("deprecation")
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) {
}
}
@ -671,12 +675,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) {
}
}
@ -696,28 +700,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;
}
}
@ -828,8 +833,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) {