[ https://jira.codehaus.org/browse/SUREFIRE-879?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=302091#comment-302091 ]
Adrian Nistor commented on SUREFIRE-879: ---------------------------------------- Great! Thanks > maven-surefire-report-plugin fails some times with > ConcurrentModificationException when running parallel TestNG > --------------------------------------------------------------------------------------------------------------- > > Key: SUREFIRE-879 > URL: https://jira.codehaus.org/browse/SUREFIRE-879 > Project: Maven Surefire > Issue Type: Bug > Components: TestNG support > Affects Versions: 2.12 > Environment: Java version: 1.6.0_32 > Maven version: 3.0.4 > maven-surefire-report-plugin: 2.12 > TestNG: 5.14.10 > Reporter: Adrian Nistor > Assignee: Paul Gier > Fix For: 2.13 > > Attachments: surefire-879-bug.zip > > > I'm running TestNG tests in parallel and get this exception > ConcurrentModificationException. > My quick analysis is that at the end of the test the method > TestSetRunListener.getAsString is accessing the list of captured output while > another thread (a stray thread spawned by the test or a completely different > concurrent test) generates some more console output causing an append to the > list which results in ConcurrentModificationException. > To fix this we need to ensure getAsString accesses the list atomically. A > possible solution is to copy/clone the list before iterating over it. > Here is the stakctrace I get. > java.util.ConcurrentModificationException > at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) > at java.util.AbstractList$Itr.next(AbstractList.java:343) > at > org.apache.maven.plugin.surefire.report.TestSetRunListener.getAsString(TestSetRunListener.java:209) > at > org.apache.maven.plugin.surefire.report.TestSetRunListener.testFailed(TestSetRunListener.java:168) > at > org.apache.maven.surefire.testng.TestNGReporter.onTestFailure(TestNGReporter.java:104) > at org.testng.internal.Invoker.runTestListeners(Invoker.java:1796) > at org.testng.internal.Invoker.runTestListeners(Invoker.java:1780) > at org.testng.internal.Invoker.invokeMethod(Invoker.java:749) > at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:846) > at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1170) > at > org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) > at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) > at org.testng.TestRunner.runWorkers(TestRunner.java:1147) > at org.testng.TestRunner.privateRun(TestRunner.java:749) > at org.testng.TestRunner.run(TestRunner.java:600) > at org.testng.SuiteRunner.runTest(SuiteRunner.java:317) > at org.testng.SuiteRunner.access$000(SuiteRunner.java:34) > at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:351) > at > org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:147) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > at java.lang.Thread.run(Thread.java:662) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira