From c642f6a72a4ac8bd65607fc2ffdd29e92a3ab055 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 05 Dec 2013 09:50:44 +0000
Subject: [PATCH] Fixed a readWriteLock deadlock happening on calling ChangelogDB.removeDB() which then calls ReplicationDB.shutdown(). Code is blocked acquiring a writeLock on the dbCloseLock, but a readLock is never unlocked. Debugging showed that the ChangeNumberIndexDB is holding a cursor on a ReplicationDB, said cursor holds the readLock. The solution is to not try to call ReplicationDB.shutdown() in ReplicationServerDomain.shutdownDomain() because it will be closed by JEChangelogDB.shutdownDB().
---
opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java b/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java
index 4402947..d6a520b 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/JEReplicaDBCursor.java
@@ -96,9 +96,10 @@
@Override
public boolean next() throws ChangelogException
{
- if (cursor != null)
+ final ReplServerDBCursor localCursor = cursor;
+ if (localCursor != null)
{
- currentChange = cursor.next();
+ currentChange = localCursor.next();
}
else
{
--
Gitblit v1.10.0