You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by es...@apache.org on 2016/06/30 18:16:26 UTC

incubator-geode git commit: GEODE-1607: Fix ConcurrentModificationException during cache close

Repository: incubator-geode
Updated Branches:
  refs/heads/develop ee057745c -> 186a09a74


GEODE-1607: Fix ConcurrentModificationException during cache close


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/186a09a7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/186a09a7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/186a09a7

Branch: refs/heads/develop
Commit: 186a09a74b202a4943ced37eddd258e7906d117f
Parents: ee05774
Author: eshu <es...@pivotal.io>
Authored: Thu Jun 30 11:11:28 2016 -0700
Committer: eshu <es...@pivotal.io>
Committed: Thu Jun 30 11:12:59 2016 -0700

----------------------------------------------------------------------
 .../gemstone/gemfire/internal/cache/TXManagerImpl.java   | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/186a09a7/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXManagerImpl.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXManagerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXManagerImpl.java
index 1512234..dc668eb 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXManagerImpl.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXManagerImpl.java
@@ -583,8 +583,15 @@ public class TXManagerImpl implements CacheTransactionManager,
     if (isClosed()) {
       return;
     }
-    this.closed = true;
-    for (TXStateProxy proxy: this.hostedTXStates.values()) {
+    TXStateProxy[] proxies = null;
+    synchronized (this.hostedTXStates) {
+      //After this, newly added TXStateProxy would not operate on the TXState.
+      this.closed = true;
+      
+      proxies = this.hostedTXStates.values().toArray(new TXStateProxy[this.hostedTXStates.size()]);      
+    }
+    
+    for (TXStateProxy proxy: proxies) {
       proxy.getLock().lock();
       try {
         proxy.close();