From: Paul Davis Date: Sat, 27 Nov 2010 17:42:09 +0000 (+0000) Subject: remove (or attempt to remove) requirement for holding process lock when changing... X-Git-Tag: 3.0-alpha5~1198 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=979a61eb3f1729affe1b0ab4201749b5cde11f68;p=ardour.git remove (or attempt to remove) requirement for holding process lock when changing connections git-svn-id: svn://localhost/ardour2/branches/3.0@8110 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h index b288de12ef..523a05b4c1 100644 --- a/libs/ardour/ardour/audioengine.h +++ b/libs/ardour/ardour/audioengine.h @@ -179,7 +179,6 @@ class AudioEngine : public SessionHandlePtr void update_total_latency (const Port&); Port *get_port_by_name (const std::string &); - Port *get_port_by_name_locked (const std::string &); enum TransportState { TransportStopped = JackTransportStopped, diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 5f619d8392..32ebe1643e 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -847,8 +847,6 @@ AudioEngine::unregister_port (Port& port) int AudioEngine::connect (const string& source, const string& destination) { - /* caller must hold process lock */ - int ret; if (!_running) { @@ -864,8 +862,8 @@ AudioEngine::connect (const string& source, const string& destination) string d = make_port_name_non_relative (destination); - Port* src = get_port_by_name_locked (s); - Port* dst = get_port_by_name_locked (d); + Port* src = get_port_by_name (s); + Port* dst = get_port_by_name (d); if (src) { ret = src->connect (d); @@ -890,8 +888,6 @@ AudioEngine::connect (const string& source, const string& destination) int AudioEngine::disconnect (const string& source, const string& destination) { - /* caller must hold process lock */ - int ret; if (!_running) { @@ -906,8 +902,8 @@ AudioEngine::disconnect (const string& source, const string& destination) string s = make_port_name_non_relative (source); string d = make_port_name_non_relative (destination); - Port* src = get_port_by_name_locked (s); - Port* dst = get_port_by_name_locked (d); + Port* src = get_port_by_name (s); + Port* dst = get_port_by_name (d); if (src) { ret = src->disconnect (d); @@ -974,30 +970,22 @@ Port * AudioEngine::get_port_by_name (const string& portname) { string s; - if (portname.find_first_of (':') == string::npos) { - s = make_port_name_non_relative (portname); - } else { - s = portname; - } - - Glib::Mutex::Lock lm (_process_lock); - return get_port_by_name_locked (s); -} - -Port * -AudioEngine::get_port_by_name_locked (const string& portname) -{ - /* caller must hold process lock */ if (!_running) { if (!_has_run) { - fatal << _("get_port_by_name_locked() called before engine was started") << endmsg; + fatal << _("get_port_by_name() called before engine was started") << endmsg; /*NOTREACHED*/ } else { return 0; } } + if (portname.find_first_of (':') == string::npos) { + s = make_port_name_non_relative (portname); + } else { + s = portname; + } + if (portname.substr (0, jack_client_name.length ()) != jack_client_name) { /* not an ardour: port */ return 0; diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc index 908e1db5c8..5b3fe34870 100644 --- a/libs/ardour/diskstream.cc +++ b/libs/ardour/diskstream.cc @@ -194,10 +194,12 @@ Diskstream::handle_input_change (IOChange change, void * /*src*/) { Glib::Mutex::Lock lm (state_lock); - if (!(input_change_pending.type & change.type)) { - input_change_pending.type = IOChange::Type (input_change_pending.type | change.type); - _session.request_input_change_handling (); - } + if (change.type & IOChange::ConfigurationChanged) { + if (!(input_change_pending.type & change.type)) { + input_change_pending.type = IOChange::Type (input_change_pending.type | change.type); + _session.request_input_change_handling (); + } + } } void diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index 0609726b23..ebed41fd64 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -159,12 +159,9 @@ IO::check_bundles (std::vector& list, const PortSet& ports) int IO::disconnect (Port* our_port, string other_port, void* src) { - assert (!AudioEngine::instance()->process_lock().trylock()); - if (other_port.length() == 0 || our_port == 0) { return 0; } - { Glib::Mutex::Lock lm (io_lock); @@ -196,8 +193,6 @@ IO::disconnect (Port* our_port, string other_port, void* src) int IO::connect (Port* our_port, string other_port, void* src) { - assert (!AudioEngine::instance()->process_lock().trylock()); - if (other_port.length() == 0 || our_port == 0) { return 0; } @@ -343,8 +338,6 @@ IO::add_port (string destination, void* src, DataType type) int IO::disconnect (void* src) { - BLOCK_PROCESS_CALLBACK (); - { Glib::Mutex::Lock lm (io_lock); diff --git a/libs/ardour/port.cc b/libs/ardour/port.cc index 67e78ac528..936cb976a5 100644 --- a/libs/ardour/port.cc +++ b/libs/ardour/port.cc @@ -122,8 +122,6 @@ Port::get_connections (std::vector & c) const int Port::connect (std::string const & other) { - /* caller must hold process lock */ - std::string const other_shrt = _engine->make_port_name_non_relative (other); std::string const this_shrt = _engine->make_port_name_non_relative (_name); @@ -149,8 +147,6 @@ Port::connect (std::string const & other) int Port::disconnect (std::string const & other) { - /* caller must hold process lock */ - std::string const other_shrt = _engine->make_port_name_non_relative (other); std::string const this_shrt = _engine->make_port_name_non_relative (_name); diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 72fcac8c46..f480638d13 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -69,6 +69,8 @@ Track::get_state () return state (true); } + + XMLNode& Track::get_template () {