Subject: Re: Threading problems
To: Bill Studenmund <wrstuden@netbsd.org>
From: Eric Haszlakiewicz <erh@jodi.nimenees.com>
List: tech-kern
Date: 11/24/2004 22:27:06
On Wed, Nov 24, 2004 at 02:53:22PM -0800, Bill Studenmund wrote:
> On Wed, Nov 24, 2004 at 04:03:44PM -0600, Eric Haszlakiewicz wrote:
> > 
> > 	So the app needs to be rewritten to use the threadlib functions. ugh.
> > I thought that libc had weak aliases for the pthread functions, but I
> > just realized that it has weak aliases for it's own internal threading
> > functions instead. (why?)
> 
> So that the right thing happens for a pthread and a non-pthread program. 
> Other OSs have libc and libc_r. We didn't want to do that, and this 
> behavior lets us.

	By "right thing" you mean non-pthread program doesn't have the 
pthread_* functions defined?  Is that really a requirement?
If so, that seems to mean that even if we wanted to accept the performance
hit, it would be incorrect to just dump pthread into libc.

> > 	Could we have a define that turns the functions in pthread.h into 
> > aliases for those in threadlib.h?  That could make fixing modules that
> > currently link against pthread easier.  e.g.
> 
> I don't think that'd be a good idea. If you're using pthread.h, you're 
> using libpthread, not threadlib.

	The problem is that re-writing each and every package that uses
pthread to use threadlib is way too much work.  We need an _easy_ way
to allow those modules to not require to be linked against libpthread
so they can be loaded by non-threaded apps.

	Perhaps instead of fiddling with the compile settings we create
a libnotquite_pthread.so that has weak symbols for the pthread_* functions
which get replaced like the __libc_* ones do if loaded by an actual
pthread program?
	- pthread compiled modules used in non-threaded programs use the stubs
	- pthread using modules used in non-threaded programs die due to
		no pthread_create() function.
	- pthread compiled/using modules used in threaded programs work due
		to libpthread loaded at exec time.
	- no (3rd party) code needs to be changed (other than setting LDADD)
	- non-threaded programs keep their symbol namespace clean
		(unless they load a pthread compiled module, of course)

eric