diff options
Diffstat (limited to 'plugins/eg-sampler.lv2/sampler.c')
-rw-r--r-- | plugins/eg-sampler.lv2/sampler.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/plugins/eg-sampler.lv2/sampler.c b/plugins/eg-sampler.lv2/sampler.c index 5292aee..8ee2c05 100644 --- a/plugins/eg-sampler.lv2/sampler.c +++ b/plugins/eg-sampler.lv2/sampler.c @@ -41,14 +41,14 @@ #include <sndfile.h> -#include <semaphore.h> - #include "lv2/lv2plug.in/ns/ext/atom/atom-helpers.h" #include "lv2/lv2plug.in/ns/ext/message/message.h" #include "lv2/lv2plug.in/ns/ext/state/state.h" #include "lv2/lv2plug.in/ns/ext/urid/urid.h" #include "lv2/lv2plug.in/ns/lv2core/lv2.h" +#include "zix/sem.h" + #include "./uris.h" #define STRING_BUF 8192 @@ -73,7 +73,7 @@ typedef struct { /* Sample */ SampleFile* samp; SampleFile* pending_samp; - sem_t signal; + ZixSem signal; int pending_sample_ready; /* Ports */ @@ -142,12 +142,10 @@ worker_thread_main(void* arg) { Sampler* plugin = (Sampler*)arg; + /* TODO: This thread never exits cleanly */ while (true) { /* Wait for run() to signal that we need to load a sample */ - if (sem_wait(&plugin->signal)) { - fprintf(stderr, "Odd, sem_wait failed...\n"); - continue; - } + zix_sem_wait(&plugin->signal); /* Then load it */ handle_load_sample(plugin); @@ -162,7 +160,7 @@ cleanup(LV2_Handle instance) Sampler* plugin = (Sampler*)instance; pthread_cancel(plugin->worker_thread); pthread_join(plugin->worker_thread, 0); - sem_destroy(&plugin->signal); + zix_sem_destroy(&plugin->signal); free(plugin->samp->data); free(plugin->pending_samp->data); @@ -212,7 +210,7 @@ instantiate(const LV2_Descriptor* descriptor, memset(&plugin->uris, 0, sizeof(plugin->uris)); /* Create signal for waking up worker thread */ - if (sem_init(&plugin->signal, 0, 0)) { + if (zix_sem_init(&plugin->signal, 0)) { fprintf(stderr, "Could not initialize semaphore.\n"); goto fail; } @@ -309,7 +307,7 @@ run(LV2_Handle instance, char* str = (char*)LV2_ATOM_BODY(filename); fprintf(stderr, "Request to load %s\n", str); memcpy(plugin->pending_samp->filepath, str, filename->size); - sem_post(&plugin->signal); + zix_sem_post(&plugin->signal); } else { fprintf(stderr, "Unknown message type %d\n", obj->id); } |