fix possible deadlock replacing processor state.

This commit is contained in:
Robin Gareus 2016-06-02 19:33:39 +02:00
parent 1af8b564b4
commit 8566d898b5

View File

@ -2826,9 +2826,14 @@ Route::set_processor_state (const XMLNode& node)
}
{
Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ());
Glib::Threads::RWLock::WriterLock lm (_processor_lock);
/* re-assign _processors w/o process-lock.
* if there's an IO-processor present in _processors but
* not in new_order, it will be deleted and ~IO takes
* a process lock.
*/
_processors = new_order;
Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ());
if (must_configure) {
configure_processors_unlocked (0, &lm);