remove (or attempt to remove) requirement for holding process lock when changing...
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 27 Nov 2010 17:42:09 +0000 (17:42 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Sat, 27 Nov 2010 17:42:09 +0000 (17:42 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@8110 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/audioengine.h
libs/ardour/audioengine.cc
libs/ardour/diskstream.cc
libs/ardour/io.cc
libs/ardour/port.cc
libs/ardour/track.cc

index b288de12ef4786f686be9bd6f7240b2fef55b287..523a05b4c11911c0930aec6492459d6828db0178 100644 (file)
@@ -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,
index 5f619d8392d26f02c83671870056ae0356fad6b6..32ebe1643edecfe579c0387953d7df058d45092b 100644 (file)
@@ -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;
index 908e1db5c88ce7b9ff4ebdd85f65743e94cd44fd..5b3fe348705d902f921703da4e8d556a0ba1bf73 100644 (file)
@@ -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
index 0609726b230320fb4bcf7601c85da2d045e111e5..ebed41fd645fe570060d02b6f6c03dfe7302f8a7 100644 (file)
@@ -159,12 +159,9 @@ IO::check_bundles (std::vector<UserBundleInfo*>& 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);
                
index 67e78ac52855fee5daab7850f9aa0e1e62d5e885..936cb976a5092c1acfff95569760f9d0ef40a5be 100644 (file)
@@ -122,8 +122,6 @@ Port::get_connections (std::vector<std::string> & 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);
 
index 72fcac8c46d6d29900a1063c00f057293e42078e..f480638d131eeddfba23ddfafe4b4ef3a0ad1c44 100644 (file)
@@ -69,6 +69,8 @@ Track::get_state ()
        return state (true);
 }
 
+
+
 XMLNode&
 Track::get_template ()
 {