[ 
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)

Reply via email to