projects
/
ardour.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
e73755f
)
Semaphores need to have a unique name -- fixes #7341
author
Robin Gareus
<robin@gareus.org>
Sun, 7 May 2017 00:02:30 +0000
(
02:02
+0200)
committer
Robin Gareus
<robin@gareus.org>
Sun, 7 May 2017 00:02:30 +0000
(
02:02
+0200)
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
patch
|
blob
|
history
diff --git
a/libs/ardour/worker.cc
b/libs/ardour/worker.cc
index 0a5971fa3e22b934bcafbeae0bc79a789ed9406a..66f833d0871347e5d7144244448981f86ad43487 100644
(file)
--- 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 <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)