13
0

VST3: only expose Mixbus sends via PSL extensions

This commit is contained in:
Robin Gareus 2020-10-13 03:49:19 +02:00
parent 4b3b13457e
commit c5618f01d6
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04

View File

@ -2453,18 +2453,25 @@ lookup_ac (SessionObject* o, FIDString id)
return s->gain_control (); return s->gain_control ();
} else if (0 == strncmp (id, ContextInfo::kSendLevel, strlen (ContextInfo::kSendLevel))) { } else if (0 == strncmp (id, ContextInfo::kSendLevel, strlen (ContextInfo::kSendLevel))) {
#ifdef MIXBUS #ifdef MIXBUS
/* This calls Route::nth_send(), which takes the _processor_lock. /* Only use mixbus sends, which are identified by providing a
* which we may already hold during initialzation * send_enable_controllable().
* (set_owner is called with process and processor locks held).
* *
* NB "console 1" asks for 3 sends, even when we return * The main reason is that the number of Mixbus sends
* kSendCount == 0. * per route is fixed, but this also works around a crash:
* *
* In Mixbus it's fine, since Mixbus send lookup * For Ardour sends, send_level_controllable() calls
* does not take the _processor_lock * Route::nth_send() which takes the _processor_lock.
*
* However this callback can be triggered initially
* Route::add_processors () -> set_owner() ->
* setup_psl_info_handler() -> ..notify..
* with process and processor locks held, leading to
* recurive locks (deadlock, or double unlock crash).
*/ */
int send_id = atoi (id + strlen (ContextInfo::kSendLevel)); int send_id = atoi (id + strlen (ContextInfo::kSendLevel));
if (s->send_enable_controllable (send_id)) {
return s->send_level_controllable (send_id); return s->send_level_controllable (send_id);
}
#endif #endif
} }
return boost::shared_ptr<AutomationControl> (); return boost::shared_ptr<AutomationControl> ();