[libdispatch-dev] testing tree now ported/automaked and committed

Robert Watson robert at fledge.watson.org
Thu Nov 5 01:18:59 PST 2009


Dear all:

Yesterday I committed an adaptation of the testing tree to the 
autoconf/automake build system.  Most tests now run on FreeBSD, and often 
report success.  Here's a quick summary:

OK:
   dispatch_api
   dispatch_apply
   dispatch_c99             * But that is not the point of this test
   dispatch_debug
   dispatch_group
   dispatch_pingpong
   dispatch_read
   dispatch_sema
   dispatch_timer_bit31

Mixed success:
   dispatch_after           * Occasionally one or two fail
   dispatch_drift           * Jitter fails, drift passes
   dispatch_starfish        * Latency requirements not always met

Pass, but no 'leaks' testing on non-Mac OS X:
   dispatch_cascade
   dispatch_readsync
   dispatch_timer_bit63

Failure:
   dispatch_priority        * Blocks complete but fails precedence test

Doesn't yet run on FreeBSD:
   dispatch_cffd            * No Core Foundation on FreeBSD
   dispatch_cpp             * No working C++ compiler with blocks off Mac OS X
   dispatch_timer_set_time  * Requires legacy API

I've left the original Darwin Makefile as Makefile.darwin, as it contains 
better runtime packaging and summarization, as well as knowing about lipo on 
Mac OS X.  Some of this packaging should make it into the portable makefiles 
in the future.  I plan to spend time investigating dispatch_priority today.

Poor latency/jitter in some tests may be a result of my using a VM for 
testing, which I'll also investigate, but could also be a property of timer 
resolution, an off-by-one error in how wakeups are calculated (perhaps by the 
POSIX semaphore/kqueue code on FreeBSD?) but we'll see.

I also ommitted some fixes to the POSIX semaphore code in libdispatch; I had 
some of the timeout calculation and handling wrong.  One important semantic 
difference between Mach and POSIX semaphores is that their timed wait 
primitives take different time scales: Mach accepts a relative timeout, and 
POSIX and absolute timeout.  There are arguments for/against both approaches, 
but I was pondering adding a non-portable POSIX semaphore extension to FreeBSD 
supporting relative timeouts to avoid additional clock reads to convert 
between the two bases.

Robert N M Watson
Computer Laboratory
University of Cambridge



More information about the libdispatch-dev mailing list