VST3: handle offline FX processing callbacks
This fixes potential deadlocks, when not using rt process threads.
This commit is contained in:
parent
3f1486fa12
commit
558e32e639
@ -1676,7 +1676,7 @@ VST3PI::restartComponent (int32 flags)
|
|||||||
|
|
||||||
if (flags & Vst::kReloadComponent) {
|
if (flags & Vst::kReloadComponent) {
|
||||||
Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
|
Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
|
||||||
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced) {
|
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced && !_process_offline) {
|
||||||
pl.acquire ();
|
pl.acquire ();
|
||||||
} else {
|
} else {
|
||||||
assert (0); // a plugin should not call this while processing
|
assert (0); // a plugin should not call this while processing
|
||||||
@ -1694,7 +1694,7 @@ VST3PI::restartComponent (int32 flags)
|
|||||||
}
|
}
|
||||||
if (flags & Vst::kParamValuesChanged) {
|
if (flags & Vst::kParamValuesChanged) {
|
||||||
Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
|
Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
|
||||||
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced) {
|
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced && !_process_offline) {
|
||||||
pl.acquire ();
|
pl.acquire ();
|
||||||
}
|
}
|
||||||
update_shadow_data ();
|
update_shadow_data ();
|
||||||
@ -1709,7 +1709,7 @@ VST3PI::restartComponent (int32 flags)
|
|||||||
* changes are automatically picked up.
|
* changes are automatically picked up.
|
||||||
*/
|
*/
|
||||||
Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
|
Glib::Threads::Mutex::Lock pl (_process_lock, Glib::Threads::NOT_LOCK);
|
||||||
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced) {
|
if (!AudioEngine::instance ()->in_process_thread () && !_is_loading_state && !_restart_component_is_synced && !_process_offline) {
|
||||||
/* Some plugins (e.g BlendEQ) call this from the process,
|
/* Some plugins (e.g BlendEQ) call this from the process,
|
||||||
* IPlugProcessor::ProcessBuffers. In that case taking the
|
* IPlugProcessor::ProcessBuffers. In that case taking the
|
||||||
* _process_lock would deadlock.
|
* _process_lock would deadlock.
|
||||||
|
Loading…
Reference in New Issue
Block a user