Non-POSIX compliant portions of FreeBSD

Garrett Cooper yanefbsd at gmail.com
Sat Apr 17 21:38:59 UTC 2010


On Sat, Apr 17, 2010 at 2:02 PM, Jilles Tjoelker <jilles at stack.nl> wrote:
> 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 at 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.

    This is good stuff to note. I'll be taking this info as well as
anything else I get and commit it back to LTP's copy of the openposix
test suite so that this stuff is corrected upstream.
Thanks,
-Garrett


More information about the freebsd-standards mailing list