struct SoundIoOsCond * soundio_os_cond_create(void) { struct SoundIoOsCond *cond = ALLOCATE(struct SoundIoOsCond, 1); if (!cond) { soundio_os_cond_destroy(cond); return NULL; } #if defined(SOUNDIO_OS_WINDOWS) InitializeConditionVariable(&cond->id); InitializeCriticalSection(&cond->default_cs_id); #elif defined(SOUNDIO_OS_KQUEUE) cond->kq_id = kqueue(); if (cond->kq_id == -1) return NULL; #else if (pthread_condattr_init(&cond->attr)) { soundio_os_cond_destroy(cond); return NULL; } cond->attr_init = true; if (pthread_condattr_setclock(&cond->attr, CLOCK_MONOTONIC)) { soundio_os_cond_destroy(cond); return NULL; } if (pthread_cond_init(&cond->id, &cond->attr)) { soundio_os_cond_destroy(cond); return NULL; } cond->id_init = true; if ((pthread_mutex_init(&cond->default_mutex_id, NULL))) { soundio_os_cond_destroy(cond); return NULL; } cond->default_mutex_init = true; #endif return cond; }
static void destroy_jack(SoundIoPrivate *si) { SoundIoJack *sij = &si->backend_data.jack; if (sij->client) jack_client_close(sij->client); if (sij->cond) soundio_os_cond_destroy(sij->cond); if (sij->mutex) soundio_os_mutex_destroy(sij->mutex); }