On Wed, 16.09.09 15:15, Daniel Mack (daniel at caiaq.de) wrote: > + s = pa_xnew(pa_semaphore, 1); > + MPCreateSemaphore(UINT_MAX, value, &(s->sema)); > + pa_assert(s->sema != 0); Hmm, I'd prefer if the ret val of MPCreateSemaphore() would be checked here. Also I find it a bit weird checking for s->sema, though not initializing it to 0 in the beginning. If the call actually failed, then the assert will check uninitialized memory. Also, comparing pointers with 0 sucks. That should be NULL. Given that this can not realisitically fail, only in OOM or OOM-like situations in which case we abort anyway it mght be enough just writing: pa_assert_se(MPCreateSemaphore(UINT_MAX, value, &s->sema) == 0); (Assuming that success is signalled by retval == 0 on MacOSX) > +void pa_semaphore_free(pa_semaphore *s) { > + pa_assert(s); > + MPDeleteSemaphore(s->sema); Same here. > + pa_xfree(s); > +} > + > +void pa_semaphore_post(pa_semaphore *s) { > + pa_assert(s); > + MPSignalSemaphore(s->sema); And here. > +} > + > +void pa_semaphore_wait(pa_semaphore *s) { > + pa_assert(s); > + /* should probably check return value (-ve is error), noErr is ok. */ > + MPWaitOnSemaphore(s->sema, kDurationForever); And here. Lennart -- Lennart Poettering Red Hat, Inc. lennart [at] poettering [dot] net http://0pointer.net/lennart/ GnuPG 0x1A015CC4