Full_Name: Marcin Waldowski Version: novell-jldap-devel-2007.10.12-1netware_windows OS: Windows XP URL: Submission from: (NULL) (83.20.102.205)
Hello.
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:
http://rafb.net/p/kwhTyh67.html
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:
http://rafb.net/p/diqKzz11.html
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.
Regards Marcin