From 6ee1440f6f56ac066f97383315b2798287f0821a Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 23 Mar 2011 22:27:01 +0000
Subject: [PATCH] Fix issue OpenDJ-95: Socket leak and constant disconnect/reconnect when a directory server can no longer reach its connected replication server

---
 opends/src/server/org/opends/server/replication/server/ReplicationDB.java |   36 ++++++++----------------------------
 1 files changed, 8 insertions(+), 28 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationDB.java b/opends/src/server/org/opends/server/replication/server/ReplicationDB.java
index 8c5ffb3..7330fac 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationDB.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationDB.java
@@ -252,12 +252,17 @@
         }
         catch (LockConflictException e)
         {
-          if (txn != null)
-            txn.abort();
-          txn = null;
+          // Try again.
         }
         finally
         {
+          if (txn != null)
+          {
+            // No effect if txn has committed.
+            txn.abort();
+            txn = null;
+          }
+
           dbCloseLock.readLock().unlock();
         }
       }
@@ -268,10 +273,6 @@
         MessageBuilder mb = new MessageBuilder();
         mb.append(ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR.get());
         logError(mb.toMessage());
-        if (txn != null)
-        {
-           txn.abort();
-        }
         replicationServer.shutdown();
       }
     }
@@ -281,16 +282,6 @@
       mb.append(ERR_CHANGELOG_SHUTDOWN_DATABASE_ERROR.get());
       mb.append(stackTraceToSingleLineString(e));
       logError(mb.toMessage());
-      if (txn != null)
-      {
-        try
-        {
-          txn.abort();
-        } catch (DatabaseException e1)
-        {
-          // can't do much more. The ReplicationServer is shuting down.
-        }
-      }
       replicationServer.shutdown();
     }
     catch (UnsupportedEncodingException e)
@@ -300,17 +291,6 @@
       mb.append(stackTraceToSingleLineString(e));
       logError(mb.toMessage());
       replicationServer.shutdown();
-      if (txn != null)
-      {
-        try
-        {
-          txn.abort();
-        } catch (DatabaseException e1)
-        {
-          // can't do much more. The ReplicationServer is shuting down.
-        }
-      }
-      replicationServer.shutdown();
     }
   }
 

--
Gitblit v1.10.0