[
https://issues.apache.org/jira/browse/PDFBOX-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14116590#comment-14116590
]
John Hewson commented on PDFBOX-2184:
-------------------------------------
I have a new theory, this could be a race condition in Java's CMM code caused
by lazy initialisation, which would explain why we don't get an error until
toRGB is called. The Open JDK code for
[ICC_ColorSpace.java|http://www.docjar.com/html/api/java/awt/color/ICC_ColorSpace.java.html]
clearly uses lazy initialisation of the color transform object:
{code}
159 public float[] toRGB (float[] colorvalue) {
160
161 if (this2srgb == null) {
162 ColorTransform[] transformList = new ColorTransform [2];
163 ICC_ColorSpace srgbCS =
164 (ICC_ColorSpace) ColorSpace.getInstance (CS_sRGB);
165 PCMM mdl = CMSManager.getModule();
166 transformList[0] = mdl.createTransform(
167 thisProfile, ColorTransform.Any, ColorTransform.In);
168 transformList[1] = mdl.createTransform(
169 srgbCS.getProfile(), ColorTransform.Any,
ColorTransform.Out);
170 this2srgb = mdl.createTransform(transformList);
171 if (needScaleInit) {
172 setComponentScaling();
173 }
174 }
175 ...
{code}
I've added a call to toRGB in the constructor of PDDeviceCMYK() which is called
statically and so will be thread safe. Hopefully this will prevent the race
condition because it will cause "this2srgb" to be initialised.
> Jenkins: CMMException: Invalid profile data
> -------------------------------------------
>
> Key: PDFBOX-2184
> URL: https://issues.apache.org/jira/browse/PDFBOX-2184
> Project: PDFBox
> Issue Type: Bug
> Affects Versions: 2.0.0
> Reporter: John Hewson
> Assignee: John Hewson
>
> Jenkins builds are intermittently failing with the error:
> {code}
> java.awt.color.CMMException: Invalid profile data
> at sun.awt.color.CMM.checkStatus(CMM.java:131)
> at sun.awt.color.ICC_Transform.<init>(ICC_Transform.java:88)
> at java.awt.color.ICC_ColorSpace.toRGB(ICC_ColorSpace.java:144)
> at
> org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB.toRGB(PDDeviceRGB.java:79)
> at
> org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace.toPaint(PDColorSpace.java:255)
> at
> org.apache.pdfbox.rendering.PageDrawer.getNonStrokingPaint(PageDrawer.java:666)
> at org.apache.pdfbox.rendering.PageDrawer.fillPath(PageDrawer.java:739)
> at
> org.apache.pdfbox.util.operator.pagedrawer.FillNonZeroRule.process(FillNonZeroRule.java:37)
> at
> org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:488)
> at
> org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:254)
> at
> org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:221)
> at
> org.apache.pdfbox.util.operator.pagedrawer.Invoke.process(Invoke.java:130)
> at
> org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:488)
> at
> org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:254)
> at
> org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:221)
> at
> org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:197)
> at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:183)
> at
> org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:228)
> at
> org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:160)
> at
> org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:83)
> at
> org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:70)
> at org.apache.pdfbox.util.TestRendering.render(TestRendering.java:78)
> {code}
--
This message was sent by Atlassian JIRA
(v6.2#6252)