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/server/ServerHandler.java | 30 ++++++++++++++++++++++++++++--
1 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ServerHandler.java b/opends/src/server/org/opends/server/replication/server/ServerHandler.java
index a098c4b..c9d2835 100644
--- a/opends/src/server/org/opends/server/replication/server/ServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -28,6 +28,7 @@
import static org.opends.server.loggers.ErrorLogger.logError;
import static org.opends.server.loggers.debug.DebugLogger.*;
+
import org.opends.server.loggers.debug.DebugTracer;
import static org.opends.server.messages.MessageHandler.getMessage;
import static org.opends.server.messages.ReplicationMessages.*;
@@ -79,6 +80,12 @@
*/
private static final DebugTracer TRACER = getTracer();
+ /**
+ * Time during which the server will wait for existing thread to stop
+ * during the shutdown.
+ */
+ private static final int SHUTDOWN_JOIN_TIMEOUT = 30000;
+
private short serverId;
private ProtocolSession session;
private final MsgQueue msgQueue = new MsgQueue();
@@ -747,7 +754,7 @@
private UpdateMessage getnextMessage()
{
UpdateMessage msg;
- do
+ while (active == true)
{
if (following == false)
{
@@ -884,7 +891,7 @@
* the first check at the beginning of this method
* and the second check just above.
*/
- } while (active == true);
+ }
return null;
}
@@ -905,6 +912,15 @@
public void stopHandler()
{
active = false;
+
+ try
+ {
+ session.close();
+ } catch (IOException e)
+ {
+ // ignore.
+ }
+
synchronized (msgQueue)
{
/* wake up the writer thread on an empty queue so that it disappear */
@@ -1218,7 +1234,17 @@
{
// Service is closing.
}
+
stopHandler();
+
+ try
+ {
+ writer.join(SHUTDOWN_JOIN_TIMEOUT);
+ reader.join(SHUTDOWN_JOIN_TIMEOUT);
+ } catch (InterruptedException e)
+ {
+ // don't try anymore to join and return.
+ }
}
/**
--
Gitblit v1.10.0