From 24d2a2024bb4761ba5a9ec5b445c99e1340860c3 Mon Sep 17 00:00:00 2001 From: Allan Erskine Date: Sat, 28 Feb 2015 23:46:02 -0500 Subject: [PATCH] Fixes #1881. Clone SystemProperties defending against ConcurrentModificationException --- testing/src/main/scala/sbt/JUnitXmlTestsListener.scala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala b/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala index 2611486ec..2b3d48334 100644 --- a/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala +++ b/testing/src/main/scala/sbt/JUnitXmlTestsListener.scala @@ -2,6 +2,7 @@ package sbt import java.io.{ IOException, StringWriter, PrintWriter, File } import java.net.InetAddress +import java.util.Hashtable import scala.collection.mutable.ListBuffer import scala.util.DynamicVariable @@ -27,7 +28,9 @@ class JUnitXmlTestsListener(val outputDir: String) extends TestsListener { val properties = { - val iter = System.getProperties.entrySet.iterator + // create a clone, defending against [[ConcurrentModificationException]] + val clonedProperties = System.getProperties.clone.asInstanceOf[Hashtable[AnyRef, AnyRef]] + val iter = clonedProperties.entrySet.iterator val props: ListBuffer[XNode] = new ListBuffer() while (iter.hasNext) { val next = iter.next