From 6bcd543bf2cd3fab463253e39e10430016bd6504 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 7 May 2017 02:02:30 +0200 Subject: Semaphores need to have a unique name -- fixes #7341 On Windows (and OSX) semaphores are named. If the name matches an existing semaphore, it is re-used and not re-initialized. In case of multiple LV2-plugins each with a worker-thread this can lead to a deadlock. --- libs/ardour/worker.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'libs/ardour/worker.cc') diff --git a/libs/ardour/worker.cc b/libs/ardour/worker.cc index 0a5971fa3e..66f833d087 100644 --- a/libs/ardour/worker.cc +++ b/libs/ardour/worker.cc @@ -22,6 +22,7 @@ #include "ardour/worker.h" #include "pbd/error.h" +#include "pbd/compose.h" #include @@ -32,7 +33,7 @@ Worker::Worker(Workee* workee, uint32_t ring_size, bool threaded) , _requests(threaded ? new RingBuffer(ring_size) : NULL) , _responses(new RingBuffer(ring_size)) , _response((uint8_t*)malloc(ring_size)) - , _sem("worker_semaphore", 0) + , _sem(string_compose ("worker_semaphore%1", this).c_str(), 0) , _thread(NULL) , _exit(false) , _synchronous(!threaded) -- cgit v1.2.3