From 59101983009dcae60e7d5f5ee5cb5daadf62ec60 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 29 Apr 2009 02:14:35 +0000 Subject: [PATCH] catch jack shutdown (from server) and handle it better then we used to in terms of preventing things from believing that we are still connected git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@5006 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/session.h | 2 +- libs/ardour/audioengine.cc | 4 ++-- libs/ardour/session_transport.cc | 13 ++++++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index b2f9197a4d..42095004fc 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -1090,7 +1090,7 @@ class Session : public PBD::StatefulDestructible void reset_slave_state (); bool follow_slave (nframes_t); - void set_slave_source (SlaveSource); + void set_slave_source (SlaveSource, bool stop_transport = true); bool _exporting; int prepare_to_export (ARDOUR::AudioExportSpecification&); diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index c31ce98a37..c7932daeec 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -819,6 +819,7 @@ AudioEngine::halted (void *arg) ae->_running = false; ae->_buffer_size = 0; ae->_frame_rate = 0; + ae->_jack = 0; if (was_running) { ae->Halted(); /* EMIT SIGNAL */ @@ -962,8 +963,7 @@ nframes_t AudioEngine::get_port_total_latency (const Port& port) { if (!_jack) { - fatal << _("get_port_total_latency() called with no JACK client connection") << endmsg; - /*NOTREACHED*/ + return 0; } return jack_port_get_total_latency (_jack, port._port); diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 280189241c..3d5e7a30ac 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -1016,7 +1016,7 @@ Session::reset_rf_scale (nframes_t motion) } void -Session::set_slave_source (SlaveSource src) +Session::set_slave_source (SlaveSource src, bool stop_the_transport) { bool reverse = false; bool non_rt_required = false; @@ -1041,7 +1041,9 @@ Session::set_slave_source (SlaveSource src) switch (src) { case None: - stop_transport (); + if (stop_the_transport) { + stop_transport (); + } break; case MTC: @@ -1233,11 +1235,16 @@ Session::engine_halted () g_atomic_int_set (&butler_should_do_transport_work, 0); post_transport_work = PostTransportWork (0); stop_butler (); - + realtime_stop (false); non_realtime_stop (false, 0, ignored); transport_sub_state = 0; + if (synced_to_jack()) { + /* transport is already stopped, hence the second argument */ + set_slave_source (None, false); + } + TransportStateChange (); /* EMIT SIGNAL */ }