svn commit: r189828 - in head: include sys/sys

Coleman Kane cokane at FreeBSD.org
Sat Mar 21 15:38:07 PDT 2009


On Sat, 2009-03-21 at 13:42 +0000, Bruce Simpson wrote:
> Robert Watson wrote:
> > On Fri, 20 Mar 2009, Coleman Kane wrote:
> >
> >> I've found that many of the GNU apps are notorious for this. I really 
> >> can't say that I know why libassuan or gnupg explicitly require GNU 
> >> pth, rather than first attempting to use POSIX pthread API. Their 
> >> configure scripts both want to search for and run pth-config, and 
> >> fail to enable some sort of threaded features if it doesn't exist. I 
> >> already tried removing pth stuff from both port Makefiles to see what 
> >> would happen. I didn't spend much time on it after I figured out that 
> >> devel/pth would just work if I removed the signal.h include.
> >>
> >> I am guessing that some non-standard extensions which GNU pth 
> >> provides are not provided by the normal POSIX spec.
> >>
> >> In fact, libassuan just goes ahead and uses a bunch of pth_* 
> >> overrides for dealing with them in a thread-safe manner (waitpid, 
> >> read, write, select, usleep).
> >
> > Historically, pthreads implementations were highly variable in 
> > quality, completeness, etc.  It wouldn't surprise me if the 
> > persistence of applications linking against pth isn't, in part, a 
> > response to that (now-historic) situation.
> 
> No, this isn't the only reason. There are a few issues with threading 
> and fork() -- other implementations support forking and rethreading 
> processes, something which bends the POSIX rules (it is not expressly 
> forbidden by them), but ours hasn't. This was causing some of the Python 
> regression tests to fail for 'multiprocessing' and 'threading'.
> 
> Since POSIX semaphores appear to be fixed, however, we should be able to 
> get away with building Python on FreeBSD with them natively. kib@ has 
> committed the rtld fix which makes this possible in 8-CURRENT. For now, 
> ie until such fixes can be MFCed, I've committed support to the 
> lang/python26 port to enable it to be built against GNU Pth.
> 
> cheers
> BMS

From what I can tell, pth provides a superset of the POSIX thread API.
GnuPG and libassuan use some of the higher-level APIs provided by pth
(such as pth's implementation of stdio functions).

Namely, the functions described here:
      * http://www.gnu.org/software/pth/pth-manual.html#generalized_posix_replacement_api
      * http://www.gnu.org/software/pth/pth-manual.html#standard_posix_replacement_api

These appear to provide thread-blocking versions of the standard-C I/O
calls, rather than the process-blocking variants that are common.
Basically, it comes with pre-written recipes for common multi-threaded
I/O problems. GnuPG and libassuan use this part of Pth's API, rather
than rolling their own I/O routines based upon POSIX or SUS standards.

-- 
Coleman Kane
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
Url : http://lists.freebsd.org/pipermail/svn-src-all/attachments/20090321/31097e4a/attachment.pgp


More information about the svn-src-all mailing list