-
Bug
-
Resolution: Not an Issue
-
P2
-
None
-
1.4.2_02
-
x86
-
windows_2000
A customer creates a InitialLdapContext instance to eliminate contexts but is
seeing this operation hang indefinitely after calling
InitialLdapContext.destroySubcontext.
The thread dump shows the calling thread "main" where destroySubcontext was made is waiting for a lock from a Connection.readReply call. "Thread-37" is the
only thread running and assuming it is blocking this operation performing a socketRead. After using jdb we notice that "Thread-37" was created when the
call ctx = new InitialLdapContext(env, null) was done. So it seems the
InitialLdapContext instance is tripping over itself.
The customer sees this hang randomly on various Windows systems. The hang
occurs more frequently using 1.3.1. It is better with 1.4.2_02 but the hang still happens.
Attached is the file LDAPRepository.java where the operation begins.
A call to deleteTheObject(String cfgname) will create the InitialLdapContext
instance from a method call ctx = ldapOps.getLDAPConnection(jndiEnv) (method
source include).
The method deleteTheObject(ldapOps, jndiEnv, ctx, subctx, cfgname)
is then called to traverse the config object recursively that eventually makes the call to ldapOps.destroyLDAPSubcontext(...) in the file ClusterProfileFailProofOperations.java to delete the subcontext
ctx.destroySubcontext(dn);.
seeing this operation hang indefinitely after calling
InitialLdapContext.destroySubcontext.
The thread dump shows the calling thread "main" where destroySubcontext was made is waiting for a lock from a Connection.readReply call. "Thread-37" is the
only thread running and assuming it is blocking this operation performing a socketRead. After using jdb we notice that "Thread-37" was created when the
call ctx = new InitialLdapContext(env, null) was done. So it seems the
InitialLdapContext instance is tripping over itself.
The customer sees this hang randomly on various Windows systems. The hang
occurs more frequently using 1.3.1. It is better with 1.4.2_02 but the hang still happens.
Attached is the file LDAPRepository.java where the operation begins.
A call to deleteTheObject(String cfgname) will create the InitialLdapContext
instance from a method call ctx = ldapOps.getLDAPConnection(jndiEnv) (method
source include).
The method deleteTheObject(ldapOps, jndiEnv, ctx, subctx, cfgname)
is then called to traverse the config object recursively that eventually makes the call to ldapOps.destroyLDAPSubcontext(...) in the file ClusterProfileFailProofOperations.java to delete the subcontext
ctx.destroySubcontext(dn);.