summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-11-27 17:42:09 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-11-27 17:42:09 +0000
commit979a61eb3f1729affe1b0ab4201749b5cde11f68 (patch)
tree9d65188b65ab2d1999b0bfe14315fd36575b333f /libs
parentf3a833e38e669d3194652ddba40fa10377ff750a (diff)
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
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/audioengine.h1
-rw-r--r--libs/ardour/audioengine.cc34
-rw-r--r--libs/ardour/diskstream.cc10
-rw-r--r--libs/ardour/io.cc7
-rw-r--r--libs/ardour/port.cc4
-rw-r--r--libs/ardour/track.cc2
6 files changed, 19 insertions, 39 deletions
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<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);
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<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);
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 ()
{