Subject: Re: Threading problems
To: Todd Vierling <tv@duh.org>
From: Steven J. Dovich <dovich@tiac.net>
List: tech-pkg
Date: 11/24/2004 07:05:56
Todd Vierling wrote:
> On Tue, 23 Nov 2004, Nathan J. Williams wrote:
>
> > Thinking about this more, a better answer might be for <pthread.h> to
> > #define pthread_mutex_lock(x) to __libc_mutex_lock(x), so that ~all
> > code that is written to use locking routines from pthread.h will go
> > through the libc redirection by default,
>
> You know, I was thinking about this today and was going to ask precisely
> this question. (And isn't this what Solaris does/did, at least with the old
> libthread if not libpthread?)
Solaris has its own problems in with demand loading a threads
dependent object at run-time. They have a libthread implementation
of sigaction that replaces the libc version, and loading a threaded
object into a non-threaded application "forgets" what the previously
installed handler was. This has broken the signal management protocol
in a commercial application that I work with.
To solve the pkgsrc issues, you cannot portably dlopen() a threaded
object from a non-threaded application. Threads support has to be
in place before main() is called, and probably before C++ static
constructors get invoked.
/sjd