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();