From 26244e02e37b338851b63693dd72f782a5a1b555 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 12 Oct 2012 23:57:25 +0000
Subject: [PATCH] Fix OPENDJ-612: SDK: Race conditions installing client/server filter chains during connect/bind/accept
---
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java b/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java
index 81c91b2..8810941 100644
--- a/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java
+++ b/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java
@@ -47,9 +47,11 @@
import org.forgerock.opendj.ldap.responses.ExtendedResult;
import org.glassfish.grizzly.CompletionHandler;
import org.glassfish.grizzly.EmptyCompletionHandler;
+import org.glassfish.grizzly.SocketConnectorHandler;
import org.glassfish.grizzly.filterchain.FilterChain;
import org.glassfish.grizzly.filterchain.FilterChainBuilder;
import org.glassfish.grizzly.filterchain.TransportFilter;
+import org.glassfish.grizzly.nio.transport.TCPNIOConnectorHandler;
import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
import com.forgerock.opendj.util.AsynchronousFutureResult;
@@ -148,8 +150,6 @@
// Test shows that its much faster with non block writes but risk
// running out of memory if the server is slow.
connection.configureBlocking(true);
- connection.setProcessor(defaultFilterChain);
-
final LDAPConnection ldapConnection = new LDAPConnection(connection, options);
clientFilter.registerConnection(connection, ldapConnection);
return ldapConnection;
@@ -231,10 +231,12 @@
@Override
public FutureResult<Connection> getConnectionAsync(
final ResultHandler<? super Connection> handler) {
+ final SocketConnectorHandler connectorHandler =
+ TCPNIOConnectorHandler.builder(transport).processor(defaultFilterChain).build();
final AsynchronousFutureResult<Connection> future =
new AsynchronousFutureResult<Connection>(handler);
final CompletionHandlerAdapter cha = new CompletionHandlerAdapter(future);
- transport.connect(socketAddress, cha);
+ connectorHandler.connect(socketAddress, cha);
return future;
}
--
Gitblit v1.10.0