Concurrency bug fix in ResultMap
diff --git a/3rdparty/backport-util-concurrent-2.2.jar b/3rdparty/backport-util-concurrent-2.2.jar
index 338e546..61f54c3 100644
--- a/3rdparty/backport-util-concurrent-2.2.jar
+++ b/3rdparty/backport-util-concurrent-2.2.jar
Binary files differ
diff --git a/3rdparty/backport-util-concurrent-full-2.2.jar b/3rdparty/backport-util-concurrent-full-2.2.jar
new file mode 100644
index 0000000..20a1687
--- /dev/null
+++ b/3rdparty/backport-util-concurrent-full-2.2.jar
Binary files differ
diff --git a/3rdparty/qdox-1.6.1.jar b/3rdparty/qdox-1.6.1.jar
index 8587ae2..76f49e8 100644
--- a/3rdparty/qdox-1.6.1.jar
+++ b/3rdparty/qdox-1.6.1.jar
Binary files differ
diff --git a/3rdparty/qdox-full-1.6.1.jar b/3rdparty/qdox-full-1.6.1.jar
new file mode 100644
index 0000000..a7a9c2c
--- /dev/null
+++ b/3rdparty/qdox-full-1.6.1.jar
Binary files differ
diff --git a/src/main/org/testng/internal/ResultMap.java b/src/jdk14/org/testng/internal/ResultMap.java
similarity index 83%
copy from src/main/org/testng/internal/ResultMap.java
copy to src/jdk14/org/testng/internal/ResultMap.java
index b3288f1..04c94a0 100644
--- a/src/main/org/testng/internal/ResultMap.java
+++ b/src/jdk14/org/testng/internal/ResultMap.java
@@ -5,14 +5,14 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
 
 import org.testng.IResultMap;
 import org.testng.ITestNGMethod;
 import org.testng.ITestResult;
 
 public class ResultMap implements IResultMap {
-  private Map<ITestResult, ITestNGMethod> m_map =
-    new HashMap<ITestResult, ITestNGMethod>();
+  private Map<ITestResult, ITestNGMethod> m_map = new ConcurrentHashMap/*<ITestResult, ITestNGMethod>*/();
 
   public void addResult(ITestResult result, ITestNGMethod method) {
     m_map.put(result, method);
diff --git a/src/main/org/testng/internal/ResultMap.java b/src/jdk15/org/testng/internal/ResultMap.java
similarity index 85%
rename from src/main/org/testng/internal/ResultMap.java
rename to src/jdk15/org/testng/internal/ResultMap.java
index b3288f1..31ccaf8 100644
--- a/src/main/org/testng/internal/ResultMap.java
+++ b/src/jdk15/org/testng/internal/ResultMap.java
@@ -5,14 +5,14 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.testng.IResultMap;
 import org.testng.ITestNGMethod;
 import org.testng.ITestResult;
 
 public class ResultMap implements IResultMap {
-  private Map<ITestResult, ITestNGMethod> m_map =
-    new HashMap<ITestResult, ITestNGMethod>();
+  private Map<ITestResult, ITestNGMethod> m_map = new ConcurrentHashMap<ITestResult, ITestNGMethod>();
 
   public void addResult(ITestResult result, ITestNGMethod method) {
     m_map.put(result, method);
diff --git a/src/main/org/testng/TestRunner.java b/src/main/org/testng/TestRunner.java
index 660d5b4..b49925c 100644
--- a/src/main/org/testng/TestRunner.java
+++ b/src/main/org/testng/TestRunner.java
@@ -990,9 +990,7 @@
   //
 
   public void addPassedTest(ITestNGMethod tm, ITestResult tr) {
-    synchronized(m_passedTests) {
-      m_passedTests.addResult(tr, tm);
-    }
+    m_passedTests.addResult(tr, tm);
   }
 
   public Set<ITestResult> getPassedTests(ITestNGMethod tm) {
@@ -1000,9 +998,7 @@
   }
 
   public void addSkippedTest(ITestNGMethod tm, ITestResult tr) {
-    synchronized(m_skippedTests) {
-      m_skippedTests.addResult(tr, tm);
-    }
+    m_skippedTests.addResult(tr, tm);
   }
 
   public void addInvokedMethod(InvokedMethod im) {
@@ -1035,22 +1031,14 @@
   // ITestResultNotifier
   /////
 
-//  public ITestNGMethod[] getTestMethods() {
-//    return m_allTestMethods;
-//  }
-
   private void logFailedTest(ITestNGMethod method,
                              ITestResult tr,
                              boolean withinSuccessPercentage) {
     if (withinSuccessPercentage) {
-      synchronized(m_failedButWithinSuccessPercentageTests) {
-        m_failedButWithinSuccessPercentageTests.addResult(tr, method);
-      }
+      m_failedButWithinSuccessPercentageTests.addResult(tr, method);
     }
     else {
-      synchronized(m_failedTests) {
-        m_failedTests.addResult(tr, method);
-      }
+      m_failedTests.addResult(tr, method);
     }
   }
 
@@ -1141,21 +1129,15 @@
   
   private class ConfigurationListener implements IConfigurationListener {
     public void onConfigurationFailure(ITestResult itr) {
-      synchronized(m_failedConfigurations) {
-        m_failedConfigurations.addResult(itr, itr.getMethod());
-      }
+      m_failedConfigurations.addResult(itr, itr.getMethod());
     }
 
     public void onConfigurationSkip(ITestResult itr) {
-      synchronized(m_skippedConfigurations) {
-        m_skippedConfigurations.addResult(itr, itr.getMethod());
-      }
+      m_skippedConfigurations.addResult(itr, itr.getMethod());
     }
 
     public void onConfigurationSuccess(ITestResult itr) {
-      synchronized(m_passedConfigurations) {
-        m_passedConfigurations.addResult(itr, itr.getMethod());
-      }
+      m_passedConfigurations.addResult(itr, itr.getMethod());
     }
   }
 } // TestRunner