[Date Prev][Date Next]
(ITS#5280) JLDAP waits for response for request which hasn't been sent because of connection shutdown
Full_Name: Marcin Waldowski
OS: Windows XP
Submission from: (NULL) (220.127.116.11)
Our application gets lots of information from LDAP server which uses refferals.
Code which use jldap is executed in single thread. After some time of obtaining
informations JLDAP hangs in MessageAgent.getLDAPMessage() as you can see at
following thread dump:
It is repeatable every time we execute our application. It hangs always in the
same line of JLDAP code.
We turned on jldap debug (-Dldap.debug=TraceAll) and also sniffed communication
between JLDAP and LDAP server using Wireshark. Interesting part of JLDAP debug
you can see here:
As you can see some refferal connections is lost in lines 14, 35, 53. After that
we have some writes to that connections in lines 240 (message 146), 283
(message 147) and 333 (message 148). All this writes didn't come to the wire (as
we can see in Wireshark or rather cannot see) because of "java.io.IOException:
Output stream not initialized". This exception is only logged to debug stream
and silently discarded in com.novell.ldap.Connection.writeMessage(LDAPMessage
msg) because variable clientActive is false. So, If I understand it correctly,
caller code doesn't know that anything goes wrong in called (write message)
code. As a result JLDAP still wait for responses of messages 146, 147, 148 which
hasn't been sent. This ends up with forever wait in line 368 of debug stream.