From 621bbbda7419eace24a2590c43cc531e30185c80 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <ylecaillez@forgerock.com>
Date: Wed, 16 Dec 2015 14:23:45 +0000
Subject: [PATCH] OPENDJ-2543: ChangelogException while doing modrate on PDB instance.

---
 opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java
index 338aa41..91c26db 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/server/changelog/file/Log.java
@@ -1527,15 +1527,24 @@
     }
 
     @Override
-    public synchronized boolean next() throws ChangelogException
+    public boolean next() throws ChangelogException
     {
-      if (mustAbort)
+      // This lock is needed to ensure that abort() is atomic.
+      log.sharedLock.lock();
+      try
       {
-        delegate.close();
-        delegate = new AbortedLogCursor<>(log.getPath());
-        mustAbort = false;
+        if (mustAbort)
+        {
+          delegate.close();
+          delegate = new AbortedLogCursor<>(log.getPath());
+          mustAbort = false;
+        }
+        return delegate.next();
       }
-      return delegate.next();
+      finally
+      {
+        log.sharedLock.unlock();
+      }
     }
 
     @Override
@@ -1565,10 +1574,9 @@
     /**
      * Aborts this cursor. Once aborted, a cursor throws an
      * AbortedChangelogCursorException if it is used.
-     * <p>
-     * This method is called only when log.exclusiveLock has been acquired.
+     * @GuardedBy("exclusiveLock")
      */
-    synchronized void abort()
+    void abort()
     {
       mustAbort = true;
     }

--
Gitblit v1.10.0