Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Apr 2010 23:02:23 +0200
From:      Jilles Tjoelker <jilles@stack.nl>
To:        Garrett Wollman <wollman@csail.mit.edu>
Cc:        Garrett Cooper <yanefbsd@gmail.com>, standards@freebsd.org
Subject:   Re: Non-POSIX compliant portions of FreeBSD
Message-ID:  <20100417210223.GA41384@stack.nl>
In-Reply-To: <19398.2606.92468.700955@khavrinen.csail.mit.edu>
References:  <w2u7d6fde3d1004072200i6b1df9f5w780609c3265e400b@mail.gmail.com> <19398.2606.92468.700955@khavrinen.csail.mit.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Apr 14, 2010 at 02:32:14PM -0400, Garrett Wollman wrote:
> <<On Wed, 7 Apr 2010 22:00:41 -0700, Garrett Cooper <yanefbsd@gmail.com> said:
> 
> >     I was recently piqued by Warner to look into open_posix_testsuite,
> > and I've noticed that there are some discrepancies in our compliance
> > with POSIX standards:
> 
> Please take note of the broad variety of options in the POSIX
> specification.  There are many options which we do not implement,
> either because they are bad ideas (e.g., XSI, tracing), or because
> nobody has gotten around to implementing them (e.g., synchronous
> I/O).  A correct application will check (using getconf(1), sysconf(3),
> or both) whether the interface it desires is available before
> attempting to use it.  A broken application will use autoconf.

> > 7. We don't have clock_nanosleep, clock_getcpuclockid, or getdate
> > defined using the POSIX defined headers.

> POSIX_CLOCK_SELECTION option group.

clock_nanosleep is in the base in the 2008 version (SUSv4); the previous
POSIX_CLOCK_SELECTION option is now required. Implementing
clock_nanosleep requires a new in-kernel facility to sleep until a
certain CLOCK_REALTIME value in such a way that setting the clock
forwards makes it wake up earlier and vice versa (in particular, the
thread needs to be woken up immediately if the clock is stepped beyond
the specified absolute time). pthread_cond_timedwait() (unless the
application has selected the CLOCK_MONOTONIC clock),
pthread_mutex_timedlock(), pthread_rwlock_timedrdlock(),
pthread_rwlock_timedwrlock(), mq_timedsend(), mq_timedreceive() and
maybe more are also specified to sleep in this manner, but FreeBSD
effectively uses CLOCK_MONOTONIC timing for them, except that some of
them will correctly sleep longer if the clock has been set backwards.
This error probably has little practical effect, but clock_nanosleep()
doesn't really add anything above nanosleep() if it does not implement
absolute CLOCK_REALTIME sleeps.

clock_getcpuclockid is part of the _POSIX_CPUTIME option. Most of the
functionality of this option can be obtained via setitimer(ITIMER_PROF),
clock_gettime(CLOCK_PROF), getrusage() and kvm_getprocs().

getdate is in the XSI option group.

-- 
Jilles Tjoelker



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