Re: Crash in NSPR from within LDAP C-SDK - Bad MDOverlapped struct from GetQueuedCompletionStatus?
Anton Bobrov <[email protected]> Sun, 07 Feb 2010 23:55:52 +0100
| Newsgroups | gmane.comp.mozilla.devel.directory |
|---|---|
| Organization | Sun Microsystems, Inc. |
| Message-ID | <[email protected]> |
LDAP SDK does not create any extra threads in addition to any threads you create yourself and execute LDAP calls on. NSPR might, i dunno, could also originate from some Windows lib or component. you can clarify about NSPR on dev-tech-nspr list, maybe its a known issue. On 05/02/2010 18:01, Matthew M. DeLoera wrote: > Hello, > > I'm getting a crash down within NSPR (I'm using C-SDK 6.06, and NSPR > 4.6.4.0). I'm running in Windows XP. I saw a crash in my release build, > and I've been running in VS2003 to try and pinpoint it. I rebuilt NSPR > as debug to get its PDBs. > > Anyway, I saw a crash within PR_MD_PAUSE_CPU. It looks like the > MDOverlapped struct that comes back from GetQueuedCompletionStatus (line > 301 in ntio.c) is bad. It asserts (PR_ASSERT) down below on line 386, > where it checks that mdOlp->ioModel == _MD_BlockingIO. > > I know next to nothing about NSPR - beyond that the LDAP C-SDK is > internally using it. I'm only making LDAP calls. But, is it the case > that LDAP causes some threads to be spun up internally within NSPR? And > in fact, in VS, I see 3 seemingly identical threads to this one that > asserted. So, it looks like for some reason, NSPR has at least 4 active > threads all doing the same thing - handing non-blocking IO. > > Where I'm going with this, is - are there always supposed to be NSPR > threads running in the background? Not knowing NSPR, if I've > theoretically called ldap_unbind and even ldap_memcache_destroy, > shouldn't any related NSPR threads or whatnot be stopped also? > > I'm testing a failure scenario, where I do a non-blocking bind > (ldapssl_advclientauth_init, ldapssl_init, ldap_memcache_init, > ldap_simple_bind), the ldap_simple_bind call fails due to network > errors, and I call ldap_unbind and ldap_memcache_destroy to clean up. I > periodically repeat this process. > > So, when I would have thought I was all cleaned up, sitting idle, and > awaiting another change to retry this process, why do I have 5 NSPR > threads active? Is there something else I should call besides > ldap_unbind that I just haven't noticed? Is this expected behavior, and > should I think about this in a different way? I'm wondering if the NSPR > crash isn't something to do with an internal thread that is in an > indeterminate state, and hence getting bad IO completion status. > > Also, I call ldap_simple_bind in a different, temporary thread. I'm not > sharing the instance between threads, so shouldn't be any worries there. > But, could that be related as well? > > Hopefully someone can give me a hint of the direction to investigate. > And, I'm still browsing source for ideas. > > Thanks! > - Matthew > _______________________________________________ > dev-tech-ldap mailing list > [email protected] > https://lists.mozilla.org/listinfo/dev-tech-ldap