better fix for IOSelector::set_state()'s need to hold the process lock
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 27 Nov 2010 16:44:51 +0000 (16:44 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Sat, 27 Nov 2010 16:44:51 +0000 (16:44 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@8107 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/io_selector.cc

index 8677d85e47c552b0b9c36c445dbf9d53fbd15c32..d440e1397bcfa551280cbb170dbfebe32e5c7655 100644 (file)
@@ -136,23 +136,20 @@ IOSelector::set_state (ARDOUR::BundleChannel c[2], bool s)
        ARDOUR::Bundle::PortList const & our_ports = c[_ours].bundle->channel_ports (c[_ours].channel);
        ARDOUR::Bundle::PortList const & other_ports = c[_other].bundle->channel_ports (c[_other].channel);
 
+        Glib::Mutex::Lock lm (AudioEngine::instance()->process_lock());
 
        for (ARDOUR::Bundle::PortList::const_iterator i = our_ports.begin(); i != our_ports.end(); ++i) {
                for (ARDOUR::Bundle::PortList::const_iterator j = other_ports.begin(); j != other_ports.end(); ++j) {
 
-                       Port* f = _session->engine().get_port_by_name (*i);
+                       Port* f = _session->engine().get_port_by_name_locked (*i);
                        if (!f) {
                                return;
                        }
                         
-                        {
-                                Glib::Mutex::Lock lm (AudioEngine::instance()->process_lock());
-                                
-                                if (s) {
-                                        _io->connect (f, *j, 0);
-                                } else {
-                                        _io->disconnect (f, *j, 0);
-                                }
+                        if (s) {
+                                _io->connect (f, *j, 0);
+                        } else {
+                                _io->disconnect (f, *j, 0);
                         }
                }
        }