Date: Wed, 31 Mar 2004 11:16:01 -0500 (EST) From: Daniel Eischen <eischen@vigrid.com> To: "Jacques A. Vidrine" <nectar@FreeBSD.org> Cc: Sean McNeil <sean@mcneil.com> Subject: Re: nss_ldap broken Message-ID: <Pine.GSO.4.10.10403311109000.20751-100000@pcnet5.pcnet.com> In-Reply-To: <20040331160017.GH13810@madman.celabo.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.10.10403311109000.20751-100000>