From 2fb54e292faa7bd619e05e9801096cfe224dc28b Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Mon, 14 Sep 2009 13:15:02 +0000
Subject: [PATCH] Fix for 4230 ECL Cancel search (compat mode) prevent the server to stop properly

---
 opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java |   20 ++++++++++++++++++++
 opends/src/server/org/opends/server/replication/server/ECLServerHandler.java                  |    7 +++++++
 2 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index 8359381..56f18fb 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -735,6 +735,13 @@
    */
   public void shutdown()
   {
+    if (debugEnabled())
+      TRACER.debugInfo(this + " shutdown()" + draftCNDbIter);
+    if (this.draftCNDbIter != null)
+    {
+      draftCNDbIter.releaseCursor();
+      draftCNDbIter = null;
+    }
     for (int i=0;i<domainCtxts.length;i++)
     {
       if (!domainCtxts[i].rsd.unRegisterHandler(domainCtxts[i].mh))
diff --git a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
index b724b1f..1a40621 100644
--- a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -349,6 +349,7 @@
           persistentSearch.cancel();
           setSendResponse(true);
         }
+        this.abort(null);
         throw coe;
       }
       catch (Exception e)
@@ -1365,6 +1366,8 @@
    */
   public CancelResult cancel(CancelRequest cancelRequest)
   {
+    if (debugEnabled())
+      TRACER.debugInfo(this + " cancel() " + eclSession);
     if (eclSession != null)
     {
       try
@@ -1377,6 +1380,23 @@
   }
 
   /**
+   * {@inheritDoc}
+   */
+  public void abort(CancelRequest cancelRequest)
+  {
+    if (debugEnabled())
+      TRACER.debugInfo(this + " abort() " + eclSession);
+    if (eclSession != null)
+    {
+      try
+      {
+        eclSession.close();
+      }
+      catch(Exception e){}
+    }
+  }
+
+  /**
    * The unique identifier used in DSEE is named nsUniqueId and its format is
    * HHHHHHHH-HHHHHHHH-HHHHHHHH-HHHHHHHH where H is a hex digit.
    * An nsUniqueId value is for example 3970de28-08b311d9-8095b9bf-c4d9231c

--
Gitblit v1.10.0