[ https://issues.apache.org/jira/browse/PDFBOX-3015?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jason Mackin updated PDFBOX-3015: --------------------------------- Description: When running a load test using PDFRenderer's method renderImageWithDPI(pageIndex, 175), I am receiving a ConcurrentModificationException. I only receive this using Java 6-8 and Tomcat 6 or 7 but Tomcat 8 seems to work. I can reproduce this with as little as 4 concurrent threads kicked off at the same time. It only happens the first time the method is called (server startup), after that it works fine. Here is the stacktrace: {quote} java.util.ConcurrentModificationException at java.util.Vector$Itr.checkForComodification(Vector.java:1156) at java.util.Vector$Itr.next(Vector.java:1133) at sun.java2d.cmm.ProfileDeferralMgr.activateProfiles(ProfileDeferralMgr.java:93) at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:775) at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:1013) at org.apache.pdfbox.pdmodel.graphics.color.PDICCBased.loadICCProfile(PDICCBased.java:119) at org.apache.pdfbox.pdmodel.graphics.color.PDICCBased.<init>(PDICCBased.java:89) at org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace.create(PDColorSpace.java:162) at org.apache.pdfbox.pdmodel.PDResources.getColorSpace(PDResources.java:155) at org.apache.pdfbox.contentstream.operator.color.SetStrokingColorSpace.process(SetStrokingColorSpace.java:41) at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:799) at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:461) at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:438) at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149) at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:180) at org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:208) at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:139) at org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:80) {quote} Since the problem was with a java class not being synchronized, I added a simple static synchronized method to PDICCBased.java to load the profile and prevent the race condition: {quote} private static synchronized ICC_Profile getICCProfile(InputStream input) throws IOException \{ return ICC_Profile.getInstance(input); \} {quote} And call it from the loadICCProfile method: {quote} ICC_Profile profile = PDICCBased.getICCProfile(input); {quote} was: When running a load test using PDFRenderer's method renderImageWithDPI(pageIndex, 175), I am receiving a ConcurrentModificationException. I only receive this using Java 6-8 and Tomcat 6 or 7, 8 seems to work fine. I can reproduce this with as little as 4 concurrent threads kicked off at the same time. It only happens the first time the method is called (server startup), after that it works fine. Here is the stacktrace: {quote} java.util.ConcurrentModificationException at java.util.Vector$Itr.checkForComodification(Vector.java:1156) at java.util.Vector$Itr.next(Vector.java:1133) at sun.java2d.cmm.ProfileDeferralMgr.activateProfiles(ProfileDeferralMgr.java:93) at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:775) at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:1013) at org.apache.pdfbox.pdmodel.graphics.color.PDICCBased.loadICCProfile(PDICCBased.java:119) at org.apache.pdfbox.pdmodel.graphics.color.PDICCBased.<init>(PDICCBased.java:89) at org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace.create(PDColorSpace.java:162) at org.apache.pdfbox.pdmodel.PDResources.getColorSpace(PDResources.java:155) at org.apache.pdfbox.contentstream.operator.color.SetStrokingColorSpace.process(SetStrokingColorSpace.java:41) at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:799) at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:461) at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:438) at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149) at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:180) at org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:208) at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:139) at org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:80) {quote} Since the problem was with a java class not being synchronized, I added a simple static synchronized method to PDICCBased.java to load the profile and prevent the race condition: {quote} private static synchronized ICC_Profile getICCProfile(InputStream input) throws IOException \{ return ICC_Profile.getInstance(input); \} {quote} And call it from the loadICCProfile method: {quote} ICC_Profile profile = PDICCBased.getICCProfile(input); {quote} > PDICCBased loadICCProfile() throwing ConcurrentModificationException > -------------------------------------------------------------------- > > Key: PDFBOX-3015 > URL: https://issues.apache.org/jira/browse/PDFBOX-3015 > Project: PDFBox > Issue Type: Bug > Components: Rendering > Affects Versions: 2.0.0 > Environment: Windows 8.1 Pro > java 6-8 > tomcat 6-7 > Reporter: Jason Mackin > > When running a load test using PDFRenderer's method > renderImageWithDPI(pageIndex, 175), I am receiving a > ConcurrentModificationException. I only receive this using Java 6-8 and > Tomcat 6 or 7 but Tomcat 8 seems to work. I can reproduce this with as > little as 4 concurrent threads kicked off at the same time. It only happens > the first time the method is called (server startup), after that it works > fine. > Here is the stacktrace: > {quote} > java.util.ConcurrentModificationException > at java.util.Vector$Itr.checkForComodification(Vector.java:1156) > at java.util.Vector$Itr.next(Vector.java:1133) > at > sun.java2d.cmm.ProfileDeferralMgr.activateProfiles(ProfileDeferralMgr.java:93) > at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:775) > at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:1013) > at > org.apache.pdfbox.pdmodel.graphics.color.PDICCBased.loadICCProfile(PDICCBased.java:119) > at > org.apache.pdfbox.pdmodel.graphics.color.PDICCBased.<init>(PDICCBased.java:89) > at > org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace.create(PDColorSpace.java:162) > at > org.apache.pdfbox.pdmodel.PDResources.getColorSpace(PDResources.java:155) > at > org.apache.pdfbox.contentstream.operator.color.SetStrokingColorSpace.process(SetStrokingColorSpace.java:41) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:799) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:461) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:438) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149) > at > org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:180) > at > org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:208) > at > org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:139) > at > org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:80) > {quote} > Since the problem was with a java class not being synchronized, I added a > simple static synchronized method to PDICCBased.java to load the profile and > prevent the race condition: > {quote} > private static synchronized ICC_Profile getICCProfile(InputStream input) > throws IOException \{ > return ICC_Profile.getInstance(input); > \} > {quote} > And call it from the loadICCProfile method: > {quote} > ICC_Profile profile = PDICCBased.getICCProfile(input); > {quote} -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org