summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-04-18 02:24:28 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-04-18 02:24:28 +0000
commit3675945248bbb15f81d3c419ea1086c731d08e24 (patch)
treed2a5e5ee0e8b06a202cfc94edb31344df06093de
parentb290949195221d1db3367eed28637eef9ee7766d (diff)
fix dangling jack_client_t* in JACK_Slave when disconnecting+reconnecting to JACK
git-svn-id: svn://localhost/ardour2/trunk@1727 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--libs/ardour/ardour/session.h1
-rw-r--r--libs/ardour/ardour/slave.h1
-rw-r--r--libs/ardour/audioengine.cc1
-rw-r--r--libs/ardour/jack_slave.cc6
-rw-r--r--libs/ardour/session_transport.cc10
5 files changed, 19 insertions, 0 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index a14daa4485..675fa7ca0a 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -1609,6 +1609,7 @@ class Session : public PBD::StatefulDestructible
void jack_timebase_callback (jack_transport_state_t, nframes_t, jack_position_t*, int);
int jack_sync_callback (jack_transport_state_t, jack_position_t*);
+ void reset_jack_connection (jack_client_t* jack);
void record_enable_change_all (bool yn);
XMLNode& state(bool);
diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h
index 170facb1de..73b66ca20e 100644
--- a/libs/ardour/ardour/slave.h
+++ b/libs/ardour/ardour/slave.h
@@ -138,6 +138,7 @@ class JACK_Slave : public Slave
bool ok() const;
nframes_t resolution() const { return 1; }
bool requires_seekahead () const { return false; }
+ void reset_client (jack_client_t* jack);
private:
jack_client_t* jack;
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 51251e1cba..bb91625583 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -1133,6 +1133,7 @@ AudioEngine::reconnect_to_jack ()
if (session) {
+ session->reset_jack_connection (_jack);
nframes_t blocksize = jack_get_buffer_size (_jack);
session->set_block_size (blocksize);
session->set_frame_rate (jack_get_sample_rate (_jack));
diff --git a/libs/ardour/jack_slave.cc b/libs/ardour/jack_slave.cc
index a06e295a09..f65be1deea 100644
--- a/libs/ardour/jack_slave.cc
+++ b/libs/ardour/jack_slave.cc
@@ -44,6 +44,12 @@ JACK_Slave::~JACK_Slave ()
{
}
+void
+JACK_Slave::reset_client (jack_client_t* j)
+{
+ jack = j;
+}
+
bool
JACK_Slave::locked() const
{
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index e4811ca18d..22d30fda9d 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -1255,3 +1255,13 @@ Session::allow_auto_play (bool yn)
{
auto_play_legal = yn;
}
+
+void
+Session::reset_jack_connection (jack_client_t* jack)
+{
+ JACK_Slave* js;
+
+ if (_slave && ((js = dynamic_cast<JACK_Slave*> (_slave)) != 0)) {
+ js->reset_client (jack);
+ }
+}