mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-07 20:10:13 +02:00
Prevent race conditions from simultaneous dispatch calls
This commit is contained in:
@@ -269,8 +269,20 @@ intptr_t HostBridge::dispatch(AEffect* /*plugin*/,
|
||||
}
|
||||
|
||||
// TODO: Maybe reuse buffers here when dealing with chunk data
|
||||
return send_event(host_vst_dispatch, converter, opcode, index, value, data,
|
||||
option, std::pair<Logger&, bool>(logger, true));
|
||||
|
||||
// Finish message Bitwig's plugin host sometimes calls the dispatch function
|
||||
// for opcode 52 from an off thread. This shouldn't be happening, but it
|
||||
// does. To prevent race conditions from multiple writes over the same
|
||||
// socket at once we'll make sure that only one thread can send sockets at
|
||||
// once. These locks are actually only needed around the `write_object()`
|
||||
// part of `send_event()`.
|
||||
dispatch_semaphore.lock();
|
||||
const auto return_value =
|
||||
send_event(host_vst_dispatch, converter, opcode, index, value, data,
|
||||
option, std::pair<Logger&, bool>(logger, true));
|
||||
dispatch_semaphore.unlock();
|
||||
|
||||
return return_value;
|
||||
}
|
||||
|
||||
void HostBridge::process_replacing(AEffect* /*plugin*/,
|
||||
|
||||
Reference in New Issue
Block a user