Bug 640

Summary: Moving of libXThrStub into libX11
Product: xorg Reporter: Eric Anholt <eta>
Component: Lib/XlibAssignee: Xorg Project Team <xorg-team>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: high CC: alan.coopersmith, matthieu.herrb, roland.mainz
Version: gitKeywords: patch
Hardware: x86 (IA32)   
OS: FreeBSD   
i915 platform: i915 features:
Description Flags
move of UIThrStubs.c to X11 and fixing of some thread defines none

Description Eric Anholt 2004-05-18 18:57:13 UTC
Background: On OpenBSD, and on old FreeBSD, libc lacks pthread stubs.  This is a
problem because libX11 needs to support threading, but shouldn't cause all X
programs to be linked against the threading library.  The solution is
libXThrStub (UIThrStubs.c), which provides weak symbols to stub threading
functions, which are ignored if the application links against the thread library.

However, it seems silly to me to have this as a separate library.  There are two
consumers of it: libX11 and libGL.  Anyone linking against libGL is linking
against libX11 anyway.  Moving the UIThrStubs.c code into libX11 removes some
os-specific mess in config/cf/ and removes a library from the system that's not
used by anyone but libX11.

Attached is a patch for review that does the UIThrStubs.c move (which I would do
with a repocopy, if approved) and cleans up/fixes some threading imake defines
on BSDs.  Any feedback on this?
Comment 1 Eric Anholt 2004-05-19 04:17:18 UTC
Created attachment 299 [details] [review]
move of UIThrStubs.c to X11 and fixing of some thread defines
Comment 2 Matthieu Herrb 2004-05-29 07:00:41 UTC
BTW, this is what is already done in OpenBSD's XF4's tree, for the same reason 
that Eric mentions. 
I don't remember why I never tried to commit it back to XFree86 though. 
Comment 3 Eric Anholt 2004-05-29 09:35:23 UTC
Committed a fixed-up variation of this patch.
Comment 4 Eric Anholt 2004-12-25 16:18:59 UTC
This change broke threading on FreeBSD 4.x, and we've noticed it widely with
glib threads apps as of the 6.8.1 update.  The issue is (afaik) that our libc_r
pthread symbols are weak (why?  I don't know.), so having the weak stubs in
libX11 causes the weak stubs to be selected instead of the real ones in libc_r,
while having them in a separate library pulled in by libX11 works.  I think the
change needs to be backed out.
Comment 5 Erik Andren 2006-05-21 18:43:28 UTC
Are the changes currently backed out or is this not an issue anymore?
Comment 6 Erik Andren 2006-06-28 12:17:21 UTC
Comment 7 Eric Anholt 2006-11-29 15:50:48 UTC
With the libpthread-stubs in libxcb, I'm happy that this bug is done with now.
Comment 8 Jamey Sharp 2006-11-29 16:27:17 UTC
Is this bug really fixed? I didn't remove the thread stubs from libX11, even
though when linked with libxcb it'll pull libpthread-stubs in too. Somebody who
can test on a system that needs thread stubs probably should do that. In
particular, I haven't checked that libpthread-stubs has a superset of the stubs
provided by libX11 or libGL. If libpthread-stubs is missing any, a patch would
be appreciated.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.