Re: nss_ldap broken

From: Daniel Eischen <eischen_at_vigrid.com>
Date: Wed, 31 Mar 2004 11:16:01 -0500 (EST)
On Wed, 31 Mar 2004, Jacques A. Vidrine wrote:

> On Tue, Mar 30, 2004 at 11:25:01AM -0500, Daniel Eischen wrote:
> > > On Tue, Mar 30, 2004 at 01:37:44AM -0800, Sean McNeil wrote:
> > > > I'm still concerned that nss_atexit can cause a seg11 if a nss_*.so.1
> > > > starts up any threads when the program isn't threaded otherwise. Don't
> > > > really know why an nss plugin would want to do that, but it is
> > > > hazardous.
> > 
> > It shouldn't be doing that.
> 
> Why do I get the sinking feeling that we'll need to have nsswitch pull
> in e.g. nss_foo.so.1 if (!__isthreaded) and nss_foo_r.so.1 otherwise?

Those libraries only need to be thread-safe; they shouldn't
be creating threads on their own.  If they are, shoot them
and the horse they rode in on.

> > > The locks may not be needed regardless.  Dan, how do threads interact
> > > with atexit()?  Are threads serialized at that point?  Does the main
> > > thread call all the atexit handlers?
> > 
> > exit() calls the finalization of atexit() to run down the exit
> > handlers. The threads library has nothing to do with it,
> > but the atexit() stuff is protected with mutexes (see
> > src/lib/libc/stdlib/atexit.c).
> 
> So whichever thread calls exit() will call all of the registered
> atexit handlers?  So why are the mutexes needed?  You are referring to
> __cxa_finalize, correct?  It appears to me that in any case, the
> atexit_mutex is not held while calling the actual handler.

You shouldn't be holding an internal mutex while calling
application code.

The mutex is needed to protect adding atexit() handlers from
multiple threads.  It is possible that one thread could be
calling atexit() while another thread is calling exit().

-- 
Dan Eischen
Received on Wed Mar 31 2004 - 06:16:14 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:49 UTC