[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Intermittent hang/deadlock in hasMore() method of LDAPSearchResults (JLDAP)
- To: openldap <openldap-software@OpenLDAP.org>
- Subject: Intermittent hang/deadlock in hasMore() method of LDAPSearchResults (JLDAP)
- From: Safdar Kureishy <safdar.kureishy@gmail.com>
- Date: Fri, 15 Jul 2005 17:52:05 -0700
- Content-disposition: inline
- Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=AVLxpCwtlsO3WRtPBHqh9M9x4+8tJqCFnx0XkCjxUtRJgJOyqURY8Qn6CSZPHcLH2R9yhygltPKHhdaqJ1V6tXI9+a/VdCDMznldkUTMujpktsVaSi2jyMH1ZWoOHfmDyiFMCrr29E2nNiGycOSRyoEhf8WVfovvLoUeL92SPJ4=
Hi,
I'm using JLDAP to access an OpenLDAP server and query for
information. There are situations (intermittent) where the hasMore()
method of an LDAPSearchResults object returned via
LDAPConnection::search() (synchronous search) seems to be hanging with
teh following stack trace:
Thread [http-8453-Processor2] (Suspended)
Object.wait(long) line: not available [native method]
MessageVector(Object).wait() line: 429 [local variables unavailable]
MessageAgent.getLDAPMessage(Integer) line: not available
LDAPSearchQueue(LDAPMessageQueue).getResponse(Integer) line: not available
LDAPSearchQueue(LDAPMessageQueue).getResponse() line: not available
LDAPSearchResults.getBatchOfResults() line: not available
LDAPSearchResults.resetVectors() line: not available
LDAPSearchResults.hasMore() line: not available [local variables unavailable]
I also see a stack dump alongside this that might be related to it at
the network level:
Thread [http-8454-Processor4] (Suspended)
PlainSocketImpl.socketAccept(SocketImpl) line: not available [native method]
PlainSocketImpl.accept(SocketImpl) line: 353
SSLServerSocketImpl(ServerSocket).implAccept(Socket) line: 448
SSLServerSocketImpl.accept() line: not available
JSSE14SocketFactory(JSSESocketFactory).acceptSocket(ServerSocket) line: 110
PoolTcpEndpoint.acceptSocket() line: 368
TcpWorkerThread.runIt(Object[]) line: 549
ThreadPool$ControlRunnable.run() line: 683
ThreadWithAttributes(Thread).run() line: 534
Has anyone had any experience with this hang problem? I'm not using
SSL for now, but I plan to eventually switch to using SSL.
Here is the code I'm using to invoke the search (it's a pretty simple
search). I obtain a connection instance by cloning a "master"
connection. After I've iterated through all the results, I close the
cloned connection. According to the Javadoc for this, the call to
close() on the cloned connection should not affect the master
connection in any way.
// Here I initialize the master connection:
...
this.masterConnection.connect(host, port);
this.masterConnection.bind(LDAPConnection.LDAP_V3,
this.loginDN, passwd);
...
// Here I search by cloning the master connection:
...
...
LDAPConnection connection = this.masterConnection.clone();
LDAPSearchResults results = connection.search(this.baseDN,
ldapScope, searchStr, requestedAttributes, false);
try {
while (results.hasMore()) { <<<<<< THIS IS WHERE THE
HANG/DEADLOCK OCCURS
LDAPEntry nativeEntry = results.next();
LDAPAttribute idAttr =
nativeEntry.getAttribute(this.staticIdAttribute);
...
...
} finally {
// Always release the connection:
this.adapter.getConnectionPoolManager().releaseConnection(connection);
}
Any help will be greatly appreciated. Is this problem also applicable
when using SSL to connect to the OpenLDAP server?
Thanks,
Safdar