From 513eb83896bf4654aa0e3628c2666e307712a8cc Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 04 Dec 2013 14:47:03 +0000
Subject: [PATCH] ChangeNumberIndexer.java: In run(), made sure all cursors are properly closed, even in case of a RuntimeException terminating the thread. Moved resetNextChangeForInsertDBCursor() out of removeAllCursors(). In removeAllCursors(), closed the CompositeDBCursor.
---
opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java | 14 +++++++++++---
1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java b/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
index 378e942..76d47bf 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
@@ -365,6 +365,7 @@
if (doClear.get())
{
removeAllCursors();
+ resetNextChangeForInsertDBCursor();
// No need to use CAS here because it is only for unit tests and at
// this point all will have been cleaned up anyway.
doClear.set(false);
@@ -434,7 +435,6 @@
Thread.currentThread().interrupt();
}
}
- removeAllCursors();
}
catch (ChangelogException e)
{
@@ -448,6 +448,10 @@
TRACER.debugCaught(DebugLogLevel.ERROR, e);
// TODO JNR error message i18n
}
+ finally
+ {
+ removeAllCursors();
+ }
}
private void moveForwardMediumConsistencyPoint(final CSN csn, final DN baseDN)
@@ -467,15 +471,19 @@
}
}
- private void removeAllCursors() throws ChangelogException
+ private void removeAllCursors()
{
+ if (nextChangeForInsertDBCursor != null)
+ {
+ nextChangeForInsertDBCursor.close();
+ nextChangeForInsertDBCursor = null;
+ }
for (Map<Integer, DBCursor<UpdateMsg>> map : allCursors.values())
{
StaticUtils.close(map.values());
}
allCursors.clear();
newCursors.clear();
- resetNextChangeForInsertDBCursor();
}
private void removeCursor(final DN baseDN, final CSN csn)
--
Gitblit v1.10.0