Take process-lock before processor-lock
authorRobin Gareus <robin@gareus.org>
Wed, 24 Aug 2016 15:21:43 +0000 (17:21 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 24 Aug 2016 15:21:43 +0000 (17:21 +0200)
This [hopefully] fixes jack1 zombification on session-load with large
plugin-states. Previously it was possible to block
Route::process_output_buffers().

libs/ardour/route.cc

index 8efe1315bc838b0d8ecfbe18bc82e9f1c7e5b104..33a6c13080491dba2dd13e529627e446884fcbf3 100644 (file)
@@ -2815,6 +2815,7 @@ 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
@@ -2822,7 +2823,6 @@ Route::set_processor_state (const XMLNode& node)
                 * a process lock.
                 */
                _processors = new_order;
-               Glib::Threads::Mutex::Lock lx (AudioEngine::instance()->process_lock ());
 
                if (must_configure) {
                        configure_processors_unlocked (0, &lm);