summaryrefslogtreecommitdiffstats
path: root/src/JackDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-02-22 18:41:10 +0000
committerDavid Robillard <d@drobilla.net>2008-02-22 18:41:10 +0000
commitc253bafb7b5cfa510aaa6f7b5aa561bd42b007da (patch)
treedb0f1c86f9bc70fee025328c27c19276b82a241d /src/JackDriver.cpp
parent75b652d59639cf0171fe51a0c1442d03081f3b2f (diff)
downloadpatchage-c253bafb7b5cfa510aaa6f7b5aa561bd42b007da.tar.gz
patchage-c253bafb7b5cfa510aaa6f7b5aa561bd42b007da.tar.bz2
patchage-c253bafb7b5cfa510aaa6f7b5aa561bd42b007da.zip
Minor refresh/initial display speedups.
Show window immediately (i.e. don't wait for driving attaching). git-svn-id: http://svn.drobilla.net/lad/patchage@1153 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/JackDriver.cpp')
-rw-r--r--src/JackDriver.cpp43
1 files changed, 14 insertions, 29 deletions
diff --git a/src/JackDriver.cpp b/src/JackDriver.cpp
index 0586717..8fccde6 100644
--- a/src/JackDriver.cpp
+++ b/src/JackDriver.cpp
@@ -102,9 +102,9 @@ JackDriver::detach()
if (_client) {
jack_deactivate(_client);
jack_client_close(_client);
- _mutex.lock();
+ _shutdown_mutex.lock();
_client = NULL;
- _mutex.unlock();
+ _shutdown_mutex.unlock();
destroy_all_ports();
_is_activated = false;
signal_detached.emit();
@@ -225,17 +225,15 @@ JackDriver::refresh()
// Jack can take _client away from us at any time throughout here :/
// Shortest locks possible is the best solution I can figure out
- _mutex.lock();
+ _shutdown_mutex.lock();
if (_client == NULL) {
- _mutex.unlock();
+ _shutdown_mutex.unlock();
shutdown();
return;
}
ports = jack_get_ports(_client, NULL, NULL, 0); // get all existing ports
-
- _mutex.unlock();
string client1_name;
string port1_name;
@@ -245,14 +243,7 @@ JackDriver::refresh()
// Add all ports
if (ports)
for (int i=0; ports[i]; ++i) {
- _mutex.lock();
- if (!_client) {
- _mutex.unlock();
- shutdown();
- return;
- }
port = jack_port_by_name(_client, ports[i]);
- _mutex.unlock();
client1_name = ports[i];
client1_name = client1_name.substr(0, client1_name.find(":"));
@@ -298,14 +289,6 @@ JackDriver::refresh()
// Add all connections
if (ports) {
- _mutex.lock();
-
- if (!_client) {
- _mutex.unlock();
- shutdown();
- return;
- }
-
for (int i=0; ports[i]; ++i) {
port = jack_port_by_name(_client, ports[i]);
@@ -314,12 +297,14 @@ JackDriver::refresh()
if (connected_ports) {
for (int j=0; connected_ports[j]; ++j) {
client1_name = ports[i];
- port1_name = client1_name.substr(client1_name.find(':')+1);
- client1_name = client1_name.substr(0, client1_name.find(':'));
+ size_t colon = client1_name.find(':');
+ port1_name = client1_name.substr(colon+1);
+ client1_name = client1_name.substr(0, colon);
client2_name = connected_ports[j];
- port2_name = client2_name.substr(client2_name.find(':')+1);
- client2_name = client2_name.substr(0, client2_name.find(':'));
+ colon = client2_name.find(':');
+ port2_name = client2_name.substr(colon+1);
+ client2_name = client2_name.substr(0, colon);
boost::shared_ptr<Port> port1
= _app->canvas()->get_port(client1_name, port1_name);
@@ -347,10 +332,10 @@ JackDriver::refresh()
free(connected_ports);
}
}
-
- _mutex.unlock();
}
+
+ _shutdown_mutex.unlock();
free(ports);
}
@@ -570,9 +555,9 @@ JackDriver::jack_shutdown_cb(void* jack_driver)
jack_reset_max_delayed_usecs(me->_client);
- me->_mutex.lock();
+ me->_shutdown_mutex.lock();
me->_client = NULL;
- me->_mutex.unlock();
+ me->_shutdown_mutex.unlock();
}