From a567a3136472c3cb288026f03f71243b3d99b513 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Thu, 21 Jul 2011 12:38:09 +0000
Subject: [PATCH] Fix issue OPENDJ-239.
---
opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java | 44 ++++++++++++++++++++++++++++++--------------
1 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java b/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java
index e0ccf0d..ed6f75b 100644
--- a/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java
+++ b/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java
@@ -23,6 +23,7 @@
*
*
* Copyright 2010 Sun Microsystems, Inc.
+ * Portions Copyright 2011 ForgeRock AS
*/
package com.forgerock.opendj.ldap;
@@ -293,13 +294,6 @@
future.adaptErrorResult(connectionInvalidReason);
return future;
}
- if (!bindOrStartTLSInProgress.compareAndSet(false, true))
- {
- future.setResultOrError(Responses.newBindResult(
- ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
- "Bind or Start TLS operation in progress"));
- return future;
- }
if (!pendingRequests.isEmpty())
{
future.setResultOrError(Responses.newBindResult(
@@ -308,6 +302,14 @@
return future;
}
+ if (!bindOrStartTLSInProgress.compareAndSet(false, true))
+ {
+ future.setResultOrError(Responses.newBindResult(
+ ResultCode.OPERATIONS_ERROR).setDiagnosticMessage(
+ "Bind or Start TLS operation in progress"));
+ return future;
+ }
+
pendingRequests.put(messageID, future);
}
@@ -331,6 +333,8 @@
{
pendingRequests.remove(messageID);
+ bindOrStartTLSInProgress.set(false);
+
// FIXME: what other sort of IOExceptions can be thrown?
// FIXME: Is this the best result code?
final Result errorResult = Responses.newResult(
@@ -499,13 +503,6 @@
future.adaptErrorResult(connectionInvalidReason);
return future;
}
- if (!bindOrStartTLSInProgress.compareAndSet(false, true))
- {
- future.setResultOrError(request.getResultDecoder()
- .newExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
- "Bind or Start TLS operation in progress"));
- return future;
- }
if (request.getOID().equals(StartTLSExtendedRequest.OID))
{
if (!pendingRequests.isEmpty())
@@ -520,6 +517,24 @@
future.setResultOrError(request.getResultDecoder()
.newExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
"This connection is already TLS enabled"));
+ return future;
+ }
+ if (!bindOrStartTLSInProgress.compareAndSet(false, true))
+ {
+ future.setResultOrError(request.getResultDecoder()
+ .newExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
+ "Bind or Start TLS operation in progress"));
+ return future;
+ }
+ }
+ else
+ {
+ if (bindOrStartTLSInProgress.get())
+ {
+ future.setResultOrError(request.getResultDecoder()
+ .newExtendedErrorResult(ResultCode.OPERATIONS_ERROR, "",
+ "Bind or Start TLS operation in progress"));
+ return future;
}
}
pendingRequests.put(messageID, future);
@@ -541,6 +556,7 @@
catch (final IOException e)
{
pendingRequests.remove(messageID);
+ bindOrStartTLSInProgress.set(false);
// FIXME: what other sort of IOExceptions can be thrown?
// FIXME: Is this the best result code?
--
Gitblit v1.10.0