From d2db6915a220002a55281ebeb94fc8c590a33853 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Thu, 14 Apr 2011 16:45:52 +0000
Subject: [PATCH] Another fix for 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/ReplicationServer.java | 32 +++++++++++++++++++++-----------
1 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 38535e6..34f5bd1 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -514,28 +514,38 @@
TRACER.debugInfo("RS " + this.getMonitorInstanceName() +
" connects to " + remoteServerURL);
+ Socket socket = new Socket();
+ ProtocolSession session = null;
try
{
InetSocketAddress ServerAddr = new InetSocketAddress(
- InetAddress.getByName(hostname), Integer.parseInt(port));
- Socket socket = new Socket();
+ InetAddress.getByName(hostname), Integer.parseInt(port));
socket.setTcpNoDelay(true);
socket.connect(ServerAddr, 500);
+ session = replSessionSecurity.createClientSession(socket,
+ ReplSessionSecurity.HANDSHAKE_TIMEOUT);
+
ReplicationServerHandler handler = new ReplicationServerHandler(
- replSessionSecurity.createClientSession(
- socket,
- ReplSessionSecurity.HANDSHAKE_TIMEOUT),
- queueSize,
- this.serverURL,
- serverId,
- this,
- rcvWindow);
+ session, queueSize, this.serverURL, serverId, this,
+ rcvWindow);
handler.connect(baseDn, sslEncryption);
}
catch (Exception e)
{
- // ignore
+ if (session != null)
+ {
+ session.close();
+ }
+
+ try
+ {
+ socket.close();
+ }
+ catch (IOException ignored)
+ {
+ // Ignore.
+ }
}
}
--
Gitblit v1.10.0