From 9f0dae3d08ca0cf7c131af2f1fc09670ace301fa Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Thu, 13 Mar 2008 14:26:23 +0000
Subject: [PATCH] Fix for 3052 : IllegalMonitorStateException in replication HeartbeatThread

---
 opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java       |    9 +++++----
 opends/src/server/org/opends/server/replication/server/ServerHandler.java           |    2 +-
 opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java |   10 +++++-----
 opends/src/server/org/opends/server/replication/server/DbHandler.java               |    5 +++--
 4 files changed, 14 insertions(+), 12 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 ef6b6aa..8341a6e 100644
--- a/opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java
+++ b/opends/src/server/org/opends/server/replication/protocol/HeartbeatThread.java
@@ -68,6 +68,7 @@
    * Set this to stop the thread.
    */
   private Boolean shutdown = false;
+  private final Object shutdown_lock = new Object();
 
 
   /**
@@ -135,11 +136,11 @@
             TRACER.debugVerbose("Heartbeat thread sleeping for %d", sleepTime);
           }
 
-          synchronized (shutdown)
+          synchronized (shutdown_lock)
           {
             if (!shutdown)
             {
-              shutdown.wait(sleepTime);
+              shutdown_lock.wait(sleepTime);
             }
           }
         }
@@ -173,10 +174,10 @@
    */
   public void shutdown()
   {
-    synchronized (shutdown)
+    synchronized (shutdown_lock)
     {
-      shutdown.notifyAll();
       shutdown = true;
+      shutdown_lock.notifyAll();
       if (debugEnabled())
       {
         TRACER.debugInfo("Going to notify Heartbeat thread.");
diff --git a/opends/src/server/org/opends/server/replication/server/DbHandler.java b/opends/src/server/org/opends/server/replication/server/DbHandler.java
index b0688e7..14ec358 100644
--- a/opends/src/server/org/opends/server/replication/server/DbHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/DbHandler.java
@@ -79,7 +79,8 @@
   // Changes are not read back by replicationServer threads that are responsible
   // for pushing the changes to other replication server or to LDAP server
   //
-  private LinkedList<UpdateMessage> msgQueue = new LinkedList<UpdateMessage>();
+  private final LinkedList<UpdateMessage> msgQueue =
+    new LinkedList<UpdateMessage>();
   private ReplicationDB db;
   private ChangeNumber firstChange = null;
   private ChangeNumber lastChange = null;
@@ -89,7 +90,7 @@
   private boolean shutdown = false;
   private boolean done = false;
   private DirectoryThread thread = null;
-  private Object flushLock = new Object();
+  private final Object flushLock = new Object();
   private ReplicationServer replicationServer;
 
 
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 6281f9e..5215f7c 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -80,8 +80,8 @@
  */
 public class ReplicationServerDomain
 {
-  private Object flowControlLock = new Object();
-  private DN baseDn = null;
+  private final Object flowControlLock = new Object();
+  private final DN baseDn;
 
   /*
    * The following map contains one balanced tree for each replica ID
@@ -93,7 +93,7 @@
    * to this replication server.
    *
    */
-  private Map<Short, ServerHandler> connectedServers =
+  private final Map<Short, ServerHandler> connectedServers =
     new ConcurrentHashMap<Short, ServerHandler>();
 
   /*
@@ -106,14 +106,14 @@
    * to this replication server.
    */
 
-  private Map<Short, ServerHandler> replicationServers =
+  private final Map<Short, ServerHandler> replicationServers =
     new ConcurrentHashMap<Short, ServerHandler>();
 
   /*
    * This map contains the List of updates received from each
    * LDAP server
    */
-  private Map<Short, DbHandler> sourceDbHandlers =
+  private final Map<Short, DbHandler> sourceDbHandlers =
     new ConcurrentHashMap<Short, DbHandler>();
   private ReplicationServer replicationServer;
 
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 53c038c..68b2ba0 100644
--- a/opends/src/server/org/opends/server/replication/server/ServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -129,7 +129,7 @@
    * this collection will contain as many elements as there are
    * LDAP servers connected to the remote replication server.
    */
-  private Map<Short, LightweightServerHandler> connectedServers =
+  private final Map<Short, LightweightServerHandler> connectedServers =
     new ConcurrentHashMap<Short, LightweightServerHandler>();
 
   /**

--
Gitblit v1.10.0