From 5f13892a157ea60b88841e7d9895ee0988944a72 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 16 Jan 2015 10:15:45 +0000
Subject: [PATCH] Prevent ConcurrentModificationException in Log read-only methods

---
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/file/Log.java |   36 ++++++++++++++++++++++++++++++------
 1 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/file/Log.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/file/Log.java
index 693cab2..781e439 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/file/Log.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/file/Log.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2014 ForgeRock AS.
+ *      Copyright 2014-2015 ForgeRock AS.
  */
 package org.opends.server.replication.server.changelog.file;
 
@@ -624,7 +624,15 @@
    */
   public Record<K, V> getOldestRecord() throws ChangelogException
   {
-    return getOldestLogFile().getOldestRecord();
+    sharedLock.lock();
+    try
+    {
+      return getOldestLogFile().getOldestRecord();
+    }
+    finally
+    {
+      sharedLock.unlock();
+    }
   }
 
 
@@ -637,7 +645,15 @@
    */
   public Record<K, V> getNewestRecord() throws ChangelogException
   {
-    return getHeadLogFile().getNewestRecord();
+    sharedLock.lock();
+    try
+    {
+      return getHeadLogFile().getNewestRecord();
+    }
+    finally
+    {
+      sharedLock.unlock();
+    }
   }
 
   /**
@@ -650,11 +666,19 @@
   public long getNumberOfRecords() throws ChangelogException
   {
     long count = 0;
-    for (final LogFile<K, V> logFile : logFiles.values())
+    sharedLock.lock();
+    try
     {
-      count += logFile.getNumberOfRecords();
+      for (final LogFile<K, V> logFile : logFiles.values())
+      {
+        count += logFile.getNumberOfRecords();
+      }
+      return count;
     }
-    return count;
+    finally
+    {
+      sharedLock.unlock();
+    }
   }
 
   /**

--
Gitblit v1.10.0