From e131e3cef7357a2f5acdc3d86979b8c5486ca71b Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 20 Mar 2012 11:19:25 +0000
Subject: [PATCH] Fix OPENDJ-457: Sleeping replication threads prevent server from shutting down
---
opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java | 42 ++++++++++++++++++++++++------------------
1 files changed, 24 insertions(+), 18 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 778a5a4..86f9024 100644
--- a/opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java
+++ b/opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java
@@ -23,7 +23,7 @@
*
*
* Copyright 2008 Sun Microsystems, Inc.
- * Portions Copyright 2011 ForgeRock AS
+ * Portions Copyright 2011-2012 ForgeRock AS
*/
package org.opends.server.replication.protocol;
@@ -32,6 +32,7 @@
import static org.opends.server.loggers.debug.DebugLogger.*;
import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.types.DebugLogLevel;
import java.io.IOException;
@@ -123,32 +124,37 @@
}
}
- try
+ long sleepTime = session.getLastPublishTime() +
+ heartbeatInterval - now;
+ if (sleepTime <= 0)
{
- long sleepTime = session.getLastPublishTime() +
- heartbeatInterval - now;
- if (sleepTime <= 0)
- {
- sleepTime = heartbeatInterval;
- }
+ sleepTime = heartbeatInterval;
+ }
- if (debugEnabled())
- {
- TRACER.debugVerbose("Heartbeat thread sleeping for %d", sleepTime);
- }
+ if (debugEnabled())
+ {
+ TRACER.debugVerbose("Heartbeat thread sleeping for %d", sleepTime);
+ }
- synchronized (shutdownLock)
+ synchronized (shutdownLock)
+ {
+ if (!shutdown)
{
- if (!shutdown)
+ try
{
shutdownLock.wait(sleepTime);
}
+ catch (InterruptedException e)
+ {
+ // Server shutdown monitor may interrupt slow threads.
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+ shutdown = true;
+ }
}
}
- catch (InterruptedException e)
- {
- // Keep looping.
- }
}
}
catch (IOException e)
--
Gitblit v1.10.0