Fix performEdit() deadlock in Ardour/Mixbus

Those DAWs would immediately call `IEditController::performEdit()` with
the same parameter change the plugin has just announced, which would
result in a deadlock. Hopefully this helps with #100.
This commit is contained in:
Robbert van der Helm
2021-04-30 20:49:38 +02:00
parent 2fe6b1c48d
commit 177431e202
3 changed files with 21 additions and 7 deletions
@@ -47,10 +47,15 @@ Vst3ComponentHandlerProxyImpl::beginEdit(Steinberg::Vst::ParamID id) {
tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::performEdit(
Steinberg::Vst::ParamID id,
Steinberg::Vst::ParamValue valueNormalized) {
return bridge.send_message(YaComponentHandler::PerformEdit{
.owner_instance_id = owner_instance_id(),
.id = id,
.value_normalized = valueNormalized});
// HACK: Ardour/Mixbus will in some cases immediately call
// `IEditController::setParamNormalized()` after this `performEdit()`,
// so we need to be able to receive that
// `IEditController::setParamNormalized()` on the same thread.
return bridge.send_mutually_recursive_message(
YaComponentHandler::PerformEdit{
.owner_instance_id = owner_instance_id(),
.id = id,
.value_normalized = valueNormalized});
}
tresult PLUGIN_API