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.
This commit is contained in:
Robin Gareus
2017-05-07 02:02:30 +02:00
parent e73755f8fb
commit 6bcd543bf2

View File

@@ -22,6 +22,7 @@
#include "ardour/worker.h"
#include "pbd/error.h"
#include "pbd/compose.h"
#include <glibmm/timer.h>
@@ -32,7 +33,7 @@ Worker::Worker(Workee* workee, uint32_t ring_size, bool threaded)
, _requests(threaded ? new RingBuffer<uint8_t>(ring_size) : NULL)
, _responses(new RingBuffer<uint8_t>(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)