From a6be5db964ffa77a68b91966d99f6fa0b36b532e Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Tue, 29 May 2007 09:27:46 +0000
Subject: [PATCH] Fix for 1561 : ReplicationDomain.disable() should wait for all threads to die be fore returning

---
 opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java |   27 ++++++++++++++++++++++++---
 1 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java b/opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java
index 9723814..c246b4c 100644
--- a/opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java
+++ b/opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java
@@ -29,6 +29,7 @@
 
 import org.opends.server.api.DirectoryThread;
 import static org.opends.server.loggers.debug.DebugLogger.*;
+
 import org.opends.server.loggers.debug.DebugTracer;
 
 import java.io.IOException;
@@ -66,7 +67,7 @@
   /**
    * Set this to stop the thread.
    */
-  private boolean shutdown = false;
+  private Boolean shutdown = false;
 
 
   /**
@@ -133,7 +134,14 @@
           {
             TRACER.debugVerbose("Heartbeat thread sleeping for %d", sleepTime);
           }
-          Thread.sleep(sleepTime);
+
+          synchronized (shutdown)
+          {
+            if (!shutdown)
+            {
+              shutdown.wait(sleepTime);
+            }
+          }
         }
         catch (InterruptedException e)
         {
@@ -161,10 +169,23 @@
 
   /**
    * Call this method to stop the thread.
+   * This method is blocking until the thread has stopped.
    */
   public void shutdown()
   {
-    shutdown = true;
+    synchronized (shutdown)
+    {
+      shutdown.notifyAll();
+      shutdown = true;
+      if (debugEnabled())
+      {
+        TRACER.debugInfo("Going to notify Heartbeat thread.");
+      }
+    }
+    if (debugEnabled())
+    {
+      TRACER.debugInfo("Returning from Heartbeat shutdown.");
+    }
   }
 
 

--
Gitblit v1.10.0