On Fri, 2004-03-26 at 13:00, Sean McNeil wrote: > OK, I think I understand this problem... > > When I have my nsswitch.conf setup as follows, I get seg11s: > > passwd: files ldap > group: files ldap > > This appears to be an issue with any external nss_*.so.1 module that > uses pthread. It looks to me it is about the following: > > /* > * Cleanup > */ > static void > nss_atexit(void) > { > (void)_pthread_rwlock_wrlock(&nss_lock); > VECTOR_FREE(_nsmap, &_nsmapsize, sizeof(*_nsmap), > (vector_free_elem)ns_dbt_free); > VECTOR_FREE(_nsmod, &_nsmodsize, sizeof(*_nsmod), > (vector_free_elem)ns_mod_free); > (void)_pthread_rwlock_unlock(&nss_lock); > } > > In my case, the nss_ldap.so.1 module was loaded which pulls in > libpthread. I'm not sure how this works without a libpthred, but it > would appear that unless libpthread.so is loaded everything is OK. But > now, it has been loaded and the rwlock_wrlock() works, but then it has > been unloaded before rwlock_unlock() gets called. > > Would using > > #include <reentrant.h> > rwlock_wrlock() > rwlock_unlock() > > macros fix this? > > Cheers, > Sean > Final thought: exit() sets __isthreaded to 0, so I am hazarding a guess that the lock isn't necessary. Removing the lock/unlock from nss_atexit() did the trick. SeanReceived on Fri Mar 26 2004 - 12:16:22 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:49 UTC