[PATCH] Add missing pthread_condattr_{init,destroy} stubs to libc

Joe Marcus Clarke marcus at FreeBSD.org
Fri Nov 27 21:47:01 UTC 2009


On Fri, 2009-11-27 at 16:19 -0500, Daniel Eischen wrote:
> On Nov 27, 2009, at 2:14 PM, Joe Marcus Clarke <marcus at freebsd.org>  
> wrote:
> 
> > On Fri, 2009-11-27 at 15:12 +0200, Kostik Belousov wrote:
> >> On Fri, Nov 27, 2009 at 12:15:18AM -0500, Joe Marcus Clarke wrote:
> >>> I would like permission to commit this patch which adds missing
> >>> pthread_condattr_{init,destroy} symbols to libc.  I think I did the
> >>> symbol addition correctly (and it seems to work).  Without this, the
> >>> weak symbols added in the libpthread-stubs port conflict with  
> >>> those in
> >>> libthr, and applications with use these symbols can crash.
> >>>
> >>> I have temporarily hacked libpthread-stubs to fix this, but I really
> >>> feel these stubs should be added to libc.  I've also copied kib as  
> >>> he
> >>> has been kind enough to review my work in the past.  Thanks.
> >>>
> >>> http://www.marcuscom.com/downloads/stubs.diff
> >>
> >> It is FBSD_1.2 version that we use for symbols added after HEAD  
> >> become
> >> CURRENT-9.
> >
> > Done.
> 
> I don't think the symbols belong in FBSD_1.2.  They already exist in  
> libthr in a previous namespace.  If you use FBSD_1.2, then you  
> probably need to bump them in libthr and libc_r, and add compatible  
> symbols (no problem there since there are no differences) for the  
> previous versions.

How would this be done?  Would I add an FBSD_1.2 namespace to
pthread.map, or would FBSD_1.1 be sufficient?  How would the
compatibility symbols be defined?

> 
> Still not sure why libc needs all libpthread stubs.  Shouldn't be  
> necessary.

Agreed, but the problem comes with the libpthread-stubs port.  This port
was added as a dependency of libxcb (which is used by just about
everything in X).  This port defines weak symbols for
pthread_condattr_destroy and pthread_condattr_init and maps them to a
function that simply returns 0.  The problem is that if a binary is
linked to both this library and -pthread, and that binary calls
pthread_condattr_init(), it can be resolved in libpthread-stubs instead
of libthr.  When this happens, the init isn't done, and any subsequent
usage of the pthread_condattr_t structure results in a segfault.

I'm certainly open to other suggestions for fixing this.

Joe

> 
> --
> DE
> 
-- 
Joe Marcus Clarke
FreeBSD GNOME Team      ::      gnome at FreeBSD.org
FreeNode / #freebsd-gnome
http://www.FreeBSD.org/gnome
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: This is a digitally signed message part
Url : http://lists.freebsd.org/pipermail/freebsd-threads/attachments/20091127/5b8ae636/attachment.pgp


More information about the freebsd-threads mailing list