GitHub #364: Avoid ConcurrentModificationException during shutdown.
diff --git a/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataStoreTest.java b/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataStoreTest.java
index ba482f9..5eb3ab0 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataStoreTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataStoreTest.java
@@ -64,6 +64,20 @@
 	}
 
 	@Test
+	public void testReentrantAccept() {
+		final boolean[] probes = new boolean[] { false, false, true };
+		store.put(new ExecutionData(1000, "Sample0", probes));
+		store.put(new ExecutionData(1001, "Sample1", probes));
+		store.accept(new IExecutionDataVisitor() {
+			public void visitClassExecution(ExecutionData data) {
+				store.put(new ExecutionData(1002, "Sample2", probes));
+				ExecutionDataStoreTest.this.visitClassExecution(data);
+			}
+		});
+		assertEquals(2, dataOutput.size());
+	}
+
+	@Test
 	public void testGetContents() {
 		final boolean[] probes = new boolean[] {};
 		final ExecutionData a = new ExecutionData(1000, "A", probes);
diff --git a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java
index d48ce3b..398286d 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.jacoco.core.data;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -154,7 +155,7 @@
 	 * @return current contents
 	 */
 	public Collection<ExecutionData> getContents() {
-		return entries.values();
+		return new ArrayList<ExecutionData>(entries.values());
 	}
 
 	/**
@@ -164,7 +165,7 @@
 	 *            interface to write content to
 	 */
 	public void accept(final IExecutionDataVisitor visitor) {
-		for (final ExecutionData data : entries.values()) {
+		for (final ExecutionData data : getContents()) {
 			visitor.visitClassExecution(data);
 		}
 	}
diff --git a/org.jacoco.doc/docroot/doc/changes.html b/org.jacoco.doc/docroot/doc/changes.html
index 1fef5aa..636244e 100644
--- a/org.jacoco.doc/docroot/doc/changes.html
+++ b/org.jacoco.doc/docroot/doc/changes.html
@@ -33,6 +33,8 @@
 <ul>
   <li>Fix <code>MBeanClient</code> example
       (GitHub <a href="https://github.com/jacoco/jacoco/issues/333">#333</a>).</li>
+  <li>Avoid <code>ConcurrentModificationException</code> during shutdown
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/364">#364</a>).</li>
 </ul>
 
 <h3>API Changes</h3>