misc/150959: [libc] Stub pthread_once in libc should call _libc_once]

Mark Linimon linimon at lonesome.com
Thu Feb 28 09:50:02 UTC 2013

The following reply was made to PR threads/150959; it has been noted by GNATS.

From: Mark Linimon <linimon at lonesome.com>
To: bug-followup at FreeBSD.org
Subject: Re: misc/150959: [libc] Stub pthread_once in libc should call
Date: Thu, 28 Feb 2013 03:46:03 -0600

 apparently this email never made it into the audit-trail
 ----- Forwarded message from John Baldwin <jhb at freebsd.org> -----
 Date: Mon, 27 Sep 2010 11:46:27 -0400
 From: John Baldwin <jhb at freebsd.org>
 To: freebsd-threads at freebsd.org
 Cc: arundel at freebsd.org, freebsd-bugs at freebsd.org
 Subject: Re: misc/150959: [libc] Stub pthread_once in libc should call
 User-Agent: KMail/1.13.5 (FreeBSD/7.3-CBSD-20100819; KDE/4.4.5; amd64; ; )
 On Sunday, September 26, 2010 1:11:52 pm arundel at freebsd.org wrote:
 > Old Synopsis: Stub pthread_once in libc should call _libc_once
 > New Synopsis: [libc] Stub pthread_once in libc should call _libc_once
 > Responsible-Changed-From-To: freebsd-bugs->freebsd-threads
 > Responsible-Changed-By: arundel
 > Responsible-Changed-When: Sun Sep 26 17:08:28 UTC 2010
 > Responsible-Changed-Why: 
 > Over to maintainer(s).
 As you note in the history, libstdc++ depends on this behavior, so it is not 
 likely to be changed.  Possibly changing the stub to always return an error 
 would be ok, except that POSIX defines no errors for pthread_once().  Note 
 that this behavior also matches Solaris apparently:
 (From /usr/include/c++/4.2/bits/gthr-default.h)
 /* On Solaris 2.6 up to 9, the libc exposes a POSIX threads interface even if
    -pthreads is not specified.  The functions are dummies and most return an
    error value.  However pthread_once returns 0 without invoking the routine
    it is passed so we cannot pretend that the interface is active if -pthreads
    is not specified.  On Solaris 2.5.1, the interface is not exposed at all so
    we need to play the usual game with weak symbols.  On Solaris 10 and up, a
    working interface is always exposed.  On FreeBSD 6 and later, libc also
    exposes a dummy POSIX threads interface, similar to what Solaris 2.6 up
    to 9 does.  FreeBSD >= 700014 even provides a pthread_cancel stub in libc,
    which means the alternate __gthread_active_p below cannot be used there.  
 #if defined(__FreeBSD__) || (defined(__sun) && defined(__svr4__))
 To be honest, I would favor libc exporting '__isthreaded' in some fashion so 
 that libstdc++ could depend on that instead.  I think the symbol is already 
 public so that libthr can set it.
 John Baldwin
 freebsd-threads at freebsd.org mailing list
 To unsubscribe, send any mail to "freebsd-threads-unsubscribe at freebsd.org"
 ----- End forwarded message -----

More information about the freebsd-threads mailing list