Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Dec 2009 08:59:20 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        Robert Watson <rwatson@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Andrew Gallatin <gallatin@cs.duke.edu>, Jilles Tjoelker <jilles@stack.nl>
Subject:   Re: svn commit: r200274 - head/lib/libc/gen
Message-ID:  <200912100859.20208.jhb@freebsd.org>
In-Reply-To: <alpine.BSF.2.00.0912100023220.23303@fledge.watson.org>
References:  <200912082048.nB8Km6aP099420@svn.freebsd.org> <4B1FAC12.6080907@cs.duke.edu> <alpine.BSF.2.00.0912100023220.23303@fledge.watson.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 09 December 2009 7:24:28 pm Robert Watson wrote:
> On Wed, 9 Dec 2009, Andrew Gallatin wrote:
> 
> > John Baldwin wrote:
> >
> >> The fact that we don't fail attempts to use pshared outright is probably 
> >> dubious.  They cannot possibly work as currently implemented aside from 
> >> fork() since the structure embeds a file descriptor and file descriptor 
> >> indices are a per-process namespace, not a global namespace.
> >
> > FWIW, this is what confused me.  It tends to be kind of a land-mine, since 
> > programs can be ported from Linux, and appear to work at first for casual 
> > use.  If we don't support pshared, we should return an error from sem_init() 
> > to make it obvious.
> >
> > Also, perhaps the sem_init() man page should mention sem_open(), since that 
> > seems to be the only way to really share a semaphore between processes on 
> > FreeBSD.
> 
> It's beginning to sound like our POSIX semaphores should be behaving more like 
> umtx, which requires only a shared page, and less like file descriptors.  Of 
> course, that would make the global namespace more tricky...

I believe even that would be tricky since umtx uses the userland address of
the umtx as a cookie and that is not guaranteed safe aside from the fork(2)
case.  Oh, hmm, I'm wrong on that one.  You can make a PROCESS_SHARED umtx
and it uses the offset relative to the start of the containing vm_object for
it's hash key.  That's cute.  Note that you really only need for the pshared
variant.  The file descriptors do provide many of the desired semantics
(Solaris implements many of the POSIX IPC primitives by mmap()'ing files in
/tmp using the provided name for example).  One possibility is to make sem_t
use the kernel-backed fd-based semaphores for named semaphores and non-pshared
semaphores but to use umtx for pshared semaphores.  The threads library already
does a similar trick where it uses umtx for !pshared semaphores and the kernel
for everything else.

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912100859.20208.jhb>