From owner-freebsd-current@FreeBSD.ORG Wed Mar 31 08:16:14 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D358516A4CF; Wed, 31 Mar 2004 08:16:14 -0800 (PST) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 57D4143D45; Wed, 31 Mar 2004 08:16:14 -0800 (PST) (envelope-from eischen@vigrid.com) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mail.pcnet.com (8.12.10/8.12.1) with ESMTP id i2VGG1tf004718; Wed, 31 Mar 2004 11:16:01 -0500 (EST) Date: Wed, 31 Mar 2004 11:16:01 -0500 (EST) From: Daniel Eischen X-Sender: eischen@pcnet5.pcnet.com To: "Jacques A. Vidrine" In-Reply-To: <20040331160017.GH13810@madman.celabo.org> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: freebsd-current@FreeBSD.org cc: Sean McNeil Subject: Re: nss_ldap broken X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Mar 2004 16:16:15 -0000 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