From 40af4ccdb06443a9a72efa380924684ce87ec0c5 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Mon, 17 Sep 2018 17:09:23 +0200 Subject: Fix a potential crash when closed with worker --- src/jalv.c | 3 +++ src/worker.c | 11 +++++++++-- src/worker.h | 3 +++ 3 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/jalv.c b/src/jalv.c index f55a315..b95e7d4 100644 --- a/src/jalv.c +++ b/src/jalv.c @@ -1179,6 +1179,9 @@ main(int argc, char** argv) } jalv_backend_close(&jalv); + /* Destroy the worker */ + jalv_worker_destroy(&jalv.worker); + /* Deactivate plugin */ suil_instance_free(jalv.ui_instance); lilv_instance_deactivate(jalv.instance); diff --git a/src/worker.c b/src/worker.c index 6f94997..8354ad6 100644 --- a/src/worker.c +++ b/src/worker.c @@ -80,11 +80,18 @@ jalv_worker_init(Jalv* jalv, void jalv_worker_finish(JalvWorker* worker) +{ + if (worker->threaded) { + zix_sem_post(&worker->sem); + zix_thread_join(worker->thread, NULL); + } +} + +void +jalv_worker_destroy(JalvWorker* worker) { if (worker->requests) { if (worker->threaded) { - zix_sem_post(&worker->sem); - zix_thread_join(worker->thread, NULL); zix_ring_free(worker->requests); } zix_ring_free(worker->responses); diff --git a/src/worker.h b/src/worker.h index 93f39e0..a437fe7 100644 --- a/src/worker.h +++ b/src/worker.h @@ -27,6 +27,9 @@ jalv_worker_init(Jalv* jalv, void jalv_worker_finish(JalvWorker* worker); +void +jalv_worker_destroy(JalvWorker* worker); + LV2_Worker_Status jalv_worker_schedule(LV2_Worker_Schedule_Handle handle, uint32_t size, -- cgit v1.2.1