From a5131f44a6afa554af8f4c82c7ffd3d4ceac1bd4 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 04 Feb 2011 12:50:58 +0000
Subject: [PATCH] OPEN - issue OPENDJ-26: Fix OpenDS issue 4585: ConcurrentModificationException in ReplicationBroker  https://bugster.forgerock.org/jira/browse/OPENDJ-26

---
 opends/src/server/org/opends/server/replication/service/CTHeartbeatPublisherThread.java |   39 +++++++++++----------------------------
 1 files changed, 11 insertions(+), 28 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/service/CTHeartbeatPublisherThread.java b/opends/src/server/org/opends/server/replication/service/CTHeartbeatPublisherThread.java
index e301b53..597a6d3 100644
--- a/opends/src/server/org/opends/server/replication/service/CTHeartbeatPublisherThread.java
+++ b/opends/src/server/org/opends/server/replication/service/CTHeartbeatPublisherThread.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2011 ForgeRock AS
  */
 
 package org.opends.server.replication.service;
@@ -51,26 +52,21 @@
   private static final DebugTracer TRACER = getTracer();
 
   /**
-   * For test purposes only to simulate loss of heartbeats.
-   */
-  static private boolean heartbeatsDisabled = false;
-
-  /**
    * The session on which heartbeats are to be sent.
    */
-  private ProtocolSession session;
+  private final ProtocolSession session;
 
   /**
    * The time in milliseconds between heartbeats.
    */
-  private long heartbeatInterval;
-  private int serverId;
+  private final long heartbeatInterval;
+  private final int serverId;
 
   /**
    * Set this to stop the thread.
    */
-  private Boolean shutdown = false;
-  private final Object shutdown_lock = new Object();
+  private volatile boolean shutdown = false;
+  private final Object shutdownLock = new Object();
 
   /**
    * Create a heartbeat thread.
@@ -112,10 +108,7 @@
 
         if (now > session.getLastPublishTime() + heartbeatInterval)
         {
-          if (!heartbeatsDisabled)
-          {
-            session.publish(ctHeartbeatMsg);
-          }
+          session.publish(ctHeartbeatMsg);
         }
 
         try
@@ -127,11 +120,11 @@
             sleepTime = heartbeatInterval;
           }
 
-          synchronized (shutdown_lock)
+          synchronized (shutdownLock)
           {
             if (!shutdown)
             {
-              shutdown_lock.wait(sleepTime);
+              shutdownLock.wait(sleepTime);
             }
           }
         }
@@ -166,20 +159,10 @@
    */
   public void shutdown()
   {
-    synchronized (shutdown_lock)
+    synchronized (shutdownLock)
     {
       shutdown = true;
-      shutdown_lock.notifyAll();
+      shutdownLock.notifyAll();
     }
   }
-
-
-  /**
-   * For testing purposes only to simulate loss of heartbeats.
-   * @param heartbeatsDisabled Set true to prevent heartbeats from being sent.
-   */
-  public static void setHeartbeatsDisabled(boolean heartbeatsDisabled)
-  {
-    CTHeartbeatPublisherThread.heartbeatsDisabled = heartbeatsDisabled;
-  }
 }

--
Gitblit v1.10.0