You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/08/31 03:10:57 UTC
svn commit: r1621550 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
Author: jahewson
Date: Sun Aug 31 01:10:57 2014
New Revision: 1621550
URL: http://svn.apache.org/r1621550
Log:
PDFBOX-2184: Attempt to workaround JVM bug
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java?rev=1621550&r1=1621549&r2=1621550&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDDeviceCMYK.java Sun Aug 31 01:10:57 2014
@@ -52,18 +52,12 @@ public final class PDDeviceCMYK extends
}
}
- private final ICC_ColorSpace awtColorSpace;
private static final PDColor INITIAL_COLOR = new PDColor(new float[] { 0, 0, 0, 1 });
+ private final ICC_ColorSpace awtColorSpace;
private PDDeviceCMYK() throws IOException
{
- awtColorSpace = getAWTColorSpace();
- }
-
- // loads the ICC color profile for CMYK
- private static ICC_ColorSpace getAWTColorSpace() throws IOException
- {
- ICC_ColorSpace colorSpace;
+ // loads the ICC color profile for CMYK
InputStream profile = null;
try
{
@@ -76,13 +70,17 @@ public final class PDDeviceCMYK extends
throw new IOException("Default CMYK color profile could not be loaded");
}
ICC_Profile iccProfile = ICC_Profile.getInstance(profile);
- colorSpace = new ICC_ColorSpace(iccProfile);
+ awtColorSpace = new ICC_ColorSpace(iccProfile);
+
+ // there is a JVM bug which results in a CMMException which appears to be a race
+ // condition caused by lazy initialization of the color transform, so we perform
+ // an initial color conversion while we're still in a static context, see PDFBOX-2184
+ awtColorSpace.toRGB(new float[] { 0, 0, 0, 0 });
}
finally
{
IOUtils.closeQuietly(profile);
}
- return colorSpace;
}
@Override