From owner-freebsd-threads@FreeBSD.ORG Thu Nov 19 15:30:23 2009 Return-Path: Delivered-To: threads@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B3ECC106566B for ; Thu, 19 Nov 2009 15:30:22 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from cyrus.watson.org (cyrus.watson.org [65.122.17.42]) by mx1.freebsd.org (Postfix) with ESMTP id 8A0188FC16 for ; Thu, 19 Nov 2009 15:30:22 +0000 (UTC) Received: from bigwig.baldwin.cx (66.111.2.69.static.nyinternet.net [66.111.2.69]) by cyrus.watson.org (Postfix) with ESMTPSA id 372AF46B49 for ; Thu, 19 Nov 2009 10:30:22 -0500 (EST) Received: from jhbbsd.hudson-trading.com (unknown [209.249.190.8]) by bigwig.baldwin.cx (Postfix) with ESMTPA id 7A5228A020 for ; Thu, 19 Nov 2009 10:30:21 -0500 (EST) From: John Baldwin To: threads@FreeBSD.org Date: Thu, 19 Nov 2009 10:30:13 -0500 User-Agent: KMail/1.9.7 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200911191030.14151.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.0.1 (bigwig.baldwin.cx); Thu, 19 Nov 2009 10:30:21 -0500 (EST) X-Virus-Scanned: clamav-milter 0.95.1 at bigwig.baldwin.cx X-Virus-Status: Clean X-Spam-Status: No, score=-2.5 required=4.2 tests=AWL,BAYES_00,RDNS_NONE autolearn=no version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bigwig.baldwin.cx Cc: Subject: Using pthread_once() in libc X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Nov 2009 15:30:23 -0000 I would like to provide a pthread_once()-like facility in libc that library bits can use to initialize data safely rather than trying to home-roll their own variants (see the recent commit to stdtime in libc). Ideally what I would like to do is have libc use the "real" pthread_once() when libthr is linked in and fall back to a simple stub without libthr linked in. I know we already do something like this for _spinlock() and friends. My question is what is the most correct way to do this? Should libc grow a new _once() symbol ala _spinlock() that is a weak symbol to a stub version and pthread_once() in thr_once.c would override that, or should there be a _pthread_once() in libc that is a stub in place of the current stub_zero? I noticed a comment in thr_spinlock.c saying the spinlock stuff is kept for backwards compat. Does this mean that for the future we would like to expose pthread symbols directly in libc? Meaning would we rather have libc export a pthread_once() and that ideally libc would be using pthread_mutex_lock/unlock instead of _spinlock/unlock? -- John Baldwin