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