[pulseaudio-discuss] [PATCH 2/4] Mac OS X: add semaphore implementation

Lennart Poettering lennart at poettering.net
Wed Sep 16 14:57:04 PDT 2009


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



More information about the pulseaudio-discuss mailing list