From 10795f4e9262b7927ecdc845273888c37fbac685 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 29 Sep 2018 12:01:58 +0200 Subject: Move exit semaphore to Jalv struct --- src/jack.c | 2 +- src/jalv.c | 22 ++++++++++++---------- src/jalv_console.c | 10 +++++----- src/jalv_gtk.c | 2 +- src/jalv_gtkmm2.cpp | 2 +- src/jalv_internal.h | 2 +- src/jalv_qt.cpp | 2 +- 7 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/jack.c b/src/jack.c index f2ced50..28560d7 100644 --- a/src/jack.c +++ b/src/jack.c @@ -51,7 +51,7 @@ jack_shutdown_cb(void* data) { Jalv* const jalv = (Jalv*)data; jalv_close_ui(jalv); - zix_sem_post(jalv->done); + zix_sem_post(&jalv->done); } /** Jack process callback. */ diff --git a/src/jalv.c b/src/jalv.c index 14a0988..b1cabfa 100644 --- a/src/jalv.c +++ b/src/jalv.c @@ -82,7 +82,7 @@ */ #define N_BUFFER_CYCLES 16 -ZixSem exit_sem; /**< Exit semaphore */ +static ZixSem* exit_sem = NULL; /**< Exit semaphore used by signal handler*/ static LV2_URID map_uri(LV2_URID_Map_Handle handle, @@ -657,7 +657,7 @@ bool jalv_update(Jalv* jalv) { /* Check quit flag and close if set. */ - if (zix_sem_try_wait(&exit_sem)) { + if (zix_sem_try_wait(&jalv->done)) { jalv_close_ui(jalv); return false; } @@ -725,12 +725,14 @@ jalv_apply_control_arg(Jalv* jalv, const char* s) static void signal_handler(ZIX_UNUSED int sig) { - zix_sem_post(&exit_sem); + zix_sem_post(exit_sem); } static void -setup_signals(void) +setup_signals(Jalv* const jalv) { + exit_sem = &jalv->done; + #ifdef HAVE_SIGACTION struct sigaction action; sigemptyset(&action.sa_mask); @@ -849,14 +851,11 @@ jalv_open(Jalv* const jalv, int argc, char** argv) LV2_Log_Log llog = { jalv, jalv_printf, jalv_vprintf }; log_feature.data = &llog; - zix_sem_init(&exit_sem, 0); - jalv->done = &exit_sem; + zix_sem_init(&jalv->done, 0); zix_sem_init(&jalv->paused, 0); zix_sem_init(&jalv->worker.sem, 0); - setup_signals(); - /* Find all installed plugins */ LilvWorld* world = lilv_world_new(); lilv_world_load_all(world); @@ -1193,7 +1192,7 @@ jalv_close(Jalv* const jalv) lilv_uis_free(jalv->uis); lilv_world_free(jalv->world); - zix_sem_destroy(&exit_sem); + zix_sem_destroy(&jalv->done); remove(jalv->temp_dir); free(jalv->temp_dir); @@ -1212,11 +1211,14 @@ main(int argc, char** argv) return EXIT_FAILURE; } + /* Set up signal handlers */ + setup_signals(&jalv); + /* Run UI (or prompt at console) */ jalv_open_ui(&jalv); /* Wait for finish signal from UI or signal handler */ - zix_sem_wait(jalv.done); + zix_sem_wait(&jalv.done); return jalv_close(&jalv); } diff --git a/src/jalv_console.c b/src/jalv_console.c index fb99a60..e12b050 100644 --- a/src/jalv_console.c +++ b/src/jalv_console.c @@ -245,7 +245,7 @@ jalv_run_custom_ui(Jalv* jalv) show_iface->show(suil_instance_get_handle(jalv->ui_instance)); // Drive idle interface until interrupted - while (!zix_sem_try_wait(jalv->done)) { + while (!zix_sem_try_wait(&jalv->done)) { jalv_update(jalv); if (idle_iface->idle(suil_instance_get_handle(jalv->ui_instance))) { break; @@ -266,7 +266,7 @@ jalv_open_ui(Jalv* jalv) { if (!jalv_run_custom_ui(jalv) && !jalv->opts.non_interactive) { // Primitive command prompt for setting control values - while (!zix_sem_try_wait(jalv->done)) { + while (!zix_sem_try_wait(&jalv->done)) { char line[128]; printf("> "); if (fgets(line, sizeof(line), stdin)) { @@ -276,11 +276,11 @@ jalv_open_ui(Jalv* jalv) } } } else { - zix_sem_wait(jalv->done); + zix_sem_wait(&jalv->done); } // Caller waits on the done sem, so increment it again to exit - zix_sem_post(jalv->done); + zix_sem_post(&jalv->done); return 0; } @@ -288,6 +288,6 @@ jalv_open_ui(Jalv* jalv) int jalv_close_ui(Jalv* jalv) { - zix_sem_post(jalv->done); + zix_sem_post(&jalv->done); return 0; } diff --git a/src/jalv_gtk.c b/src/jalv_gtk.c index f32c946..a27a8df 100644 --- a/src/jalv_gtk.c +++ b/src/jalv_gtk.c @@ -1227,7 +1227,7 @@ jalv_open_ui(Jalv* jalv) gtk_main(); suil_instance_free(jalv->ui_instance); jalv->ui_instance = NULL; - zix_sem_post(jalv->done); + zix_sem_post(&jalv->done); return 0; } diff --git a/src/jalv_gtkmm2.cpp b/src/jalv_gtkmm2.cpp index 32a0264..ae0ac96 100644 --- a/src/jalv_gtkmm2.cpp +++ b/src/jalv_gtkmm2.cpp @@ -97,7 +97,7 @@ jalv_open_ui(Jalv* jalv) delete window; delete jalv_gtk_main; - zix_sem_post(jalv->done); + zix_sem_post(&jalv->done); return 0; } diff --git a/src/jalv_internal.h b/src/jalv_internal.h index 6335f9e..a16868a 100644 --- a/src/jalv_internal.h +++ b/src/jalv_internal.h @@ -284,7 +284,7 @@ struct Jalv { JalvWorker worker; ///< Worker thread implementation JalvWorker state_worker; ///< Synchronous worker for state restore ZixSem work_lock; ///< Lock for plugin work() method - ZixSem* done; ///< Exit semaphore + ZixSem done; ///< Exit semaphore ZixSem paused; ///< Paused signal from process thread JalvPlayState play_state; ///< Current play state char* temp_dir; ///< Temporary plugin state directory diff --git a/src/jalv_qt.cpp b/src/jalv_qt.cpp index ca19b92..aa6aea4 100644 --- a/src/jalv_qt.cpp +++ b/src/jalv_qt.cpp @@ -725,7 +725,7 @@ jalv_open_ui(Jalv* jalv) timer->start(1000 / jalv->ui_update_hz); int ret = app->exec(); - zix_sem_post(jalv->done); + zix_sem_post(&jalv->done); return ret; } -- cgit v1.2.1