On Thu, 30 Mar 2006, Dag-Erling [iso-8859-1] Sm?rgrav wrote:

> Daniel Eischen <[EMAIL PROTECTED]> writes:
> >   Log:
> >   Account for recent changes in namespace.h.  Use _pthread_create
> >   instead of pthread_create.
>
> I'm not sure this is correct.  When we're inside libpthread or libthr,
> we want to use the underscore versions of pthread_*() so we're sure
> that we're referring to ourself and not to some third-party pthred
> library that may have been mixed in somehow, but outside of it, we
> want to refer to whichever pthread library the application developer
> has chosen to use (he may even have his own compiled into the
> application - been there, done that).  I believe the correct fix in
> this case is to move <pthread.h> below "un-namespace.h".

I don't think this is the right thing to do.  We should take the
same approach that libc takes.  There are some subtleties with
using the underscore versions of some of these functions, for
instance _pthread_mutex_init.  This creates a special mutex
that puts a thread in a critical region when the mutex is locked.
Signals are deferred.  The consumer of librt doesn't know that
mutexes, CVs, and threads are created behind the scenes, so
he doesn't instrument his code with pthread_cleanup_push(),
pthread_sigmask(), etc.  Even if he did, there is no API for
him to cleanup librt state.

It may be possible to protect the necessary aio, timer,
and mq functions with pthread_sigmask() and cleanup
handlers, but I haven't looked at how much overhead
this would add.

-- 
DE

_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to