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