From 50b50418f4fe6ab6dc6fe7427edce8e3a19bd7e4 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Thu, 24 Dec 2020 13:58:32 +0100 Subject: [PATCH] Fix messages between directly connecting objects iZotope plugins will already send messages when connect() is called on the first object, so this flag has to be set on both host contexts at the same time. --- src/plugin/bridges/vst3-impls/plugin-factory.cpp | 3 ++- src/wine-host/bridges/vst3-impls/host-context-proxy.cpp | 4 +++- src/wine-host/bridges/vst3.cpp | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/plugin/bridges/vst3-impls/plugin-factory.cpp b/src/plugin/bridges/vst3-impls/plugin-factory.cpp index a795a5fe..ac0b4ca9 100644 --- a/src/plugin/bridges/vst3-impls/plugin-factory.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-factory.cpp @@ -30,7 +30,7 @@ YaPluginFactoryImpl::createInstance(Steinberg::FIDString cid, void** obj) { // Class IDs may be padded with null bytes constexpr size_t uid_size = sizeof(Steinberg::TUID); - if (!cid || !_iid || strnlen(_iid, uid_size) < uid_size) { + if (!cid || !_iid || !obj || strnlen(_iid, uid_size) < uid_size) { return Steinberg::kInvalidArgument; } @@ -62,6 +62,7 @@ YaPluginFactoryImpl::createInstance(Steinberg::FIDString cid, bridge.logger.log_unknown_interface( "In IPluginFactory::createInstance()", uid); + *obj = nullptr; return Steinberg::kNotImplemented; } diff --git a/src/wine-host/bridges/vst3-impls/host-context-proxy.cpp b/src/wine-host/bridges/vst3-impls/host-context-proxy.cpp index add3ca13..0930c697 100644 --- a/src/wine-host/bridges/vst3-impls/host-context-proxy.cpp +++ b/src/wine-host/bridges/vst3-impls/host-context-proxy.cpp @@ -62,7 +62,7 @@ Vst3HostContextProxyImpl::createInstance(Steinberg::TUID /*cid*/, // Class IDs don't have a meaning here, they just mirrored the interface // from `IPlugFactory::createInstance()` constexpr size_t uid_size = sizeof(Steinberg::TUID); - if (!_iid || strnlen(_iid, uid_size) < uid_size) { + if (!_iid || !obj || strnlen(_iid, uid_size) < uid_size) { return Steinberg::kInvalidArgument; } @@ -98,6 +98,8 @@ Vst3HostContextProxyImpl::createInstance(Steinberg::TUID /*cid*/, "IHostApplication::createInstance() for indirectly " "connected objects has not yet been implemented" << std::endl; + + *obj = nullptr; return Steinberg::kNotImplemented; } } diff --git a/src/wine-host/bridges/vst3.cpp b/src/wine-host/bridges/vst3.cpp index ae60b580..64a77552 100644 --- a/src/wine-host/bridges/vst3.cpp +++ b/src/wine-host/bridges/vst3.cpp @@ -181,6 +181,9 @@ void Vst3Bridge::run() { object_instances[request.instance_id] .host_context_proxy->are_objects_directly_connected = true; + object_instances[request.other_instance_id] + .host_context_proxy->are_objects_directly_connected = + true; } return object_instances[request.instance_id]