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 <[email protected]> Authored: Wed Nov 11 16:09:41 2015 -0800 Committer: Darrel Schneider <[email protected]> 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;
