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