You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2015/11/12 01:32:54 UTC

incubator-geode git commit: GEODE-540: prevent hang by not joining while synchronized

Repository: incubator-geode
Updated Branches:
  refs/heads/develop 05e047caf -> 8b04c3d7f


GEODE-540: prevent hang by not joining while synchronized


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

Branch: refs/heads/develop
Commit: 8b04c3d7f24cc5d3cb6ab9739c698c5996e17381
Parents: 05e047c
Author: Darrel Schneider <ds...@pivotal.io>
Authored: Wed Nov 11 16:09:41 2015 -0800
Committer: Darrel Schneider <ds...@pivotal.io>
Committed: Wed Nov 11 16:32:02 2015 -0800

----------------------------------------------------------------------
 .../cache/control/OffHeapMemoryMonitor.java        | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8b04c3d7/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/control/OffHeapMemoryMonitor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/control/OffHeapMemoryMonitor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/control/OffHeapMemoryMonitor.java
index 0a6674c..721e9a6 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/control/OffHeapMemoryMonitor.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/control/OffHeapMemoryMonitor.java
@@ -115,6 +115,7 @@ public class OffHeapMemoryMonitor implements ResourceMonitor, MemoryUsageListene
     stopMonitoring(false);
   }
   public void stopMonitoring(boolean waitForThread) {
+    Thread threadToWaitFor = null;
     synchronized (this) {
       if (!this.started) {
         return;
@@ -126,17 +127,19 @@ public class OffHeapMemoryMonitor implements ResourceMonitor, MemoryUsageListene
       synchronized (this.offHeapMemoryUsageListener) {
         this.offHeapMemoryUsageListener.notifyAll();
       }
-
-      if (waitForThread && this.memoryListenerThread != null) {
-        try {
-          this.memoryListenerThread.join();
-        } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
-        }
+      if (waitForThread) {
+        threadToWaitFor = this.memoryListenerThread;
       }
       this.memoryListenerThread = null;
       this.started = false;
     }
+    if (threadToWaitFor != null) {
+      try {
+        threadToWaitFor.join();
+      } catch (InterruptedException e) {
+        Thread.currentThread().interrupt();
+      }
+    }
   }
 
   public volatile OffHeapMemoryMonitorObserver testHook;