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
This commit is contained in:
Paul Davis 2007-04-18 02:24:28 +00:00
parent b290949195
commit 3675945248
5 changed files with 19 additions and 0 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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));

View file

@ -44,6 +44,12 @@ JACK_Slave::~JACK_Slave ()
{
}
void
JACK_Slave::reset_client (jack_client_t* j)
{
jack = j;
}
bool
JACK_Slave::locked() const
{

View file

@ -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);
}
}