summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/session.cc8
-rw-r--r--libs/ardour/session_ltc.cc6
2 files changed, 13 insertions, 1 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 2b4fe2b7f1..62514f6d36 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -644,6 +644,11 @@ Session::destroy ()
_slave = 0;
}
+ /* remove I/O objects before unsetting the engine session */
+ _click_io.reset ();
+ _ltc_input.reset ();
+ _ltc_output.reset ();
+
/* disconnect from any and all signals that we are connected to */
Port::PortSignalDrop (); /* EMIT SIGNAL */
@@ -7071,13 +7076,14 @@ Session::operation_in_progress (GQuark op) const
boost::shared_ptr<Port>
Session::ltc_input_port () const
{
+ assert (_ltc_input);
return _ltc_input->nth (0);
}
boost::shared_ptr<Port>
Session::ltc_output_port () const
{
- return _ltc_output->nth (0);
+ return _ltc_output ? _ltc_output->nth (0) : boost::shared_ptr<Port> ();
}
void
diff --git a/libs/ardour/session_ltc.cc b/libs/ardour/session_ltc.cc
index 87fd47e70e..91e11c8a4c 100644
--- a/libs/ardour/session_ltc.cc
+++ b/libs/ardour/session_ltc.cc
@@ -170,6 +170,12 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
pframes_t txf = 0;
boost::shared_ptr<Port> ltcport = ltc_output_port();
+ if (!ltcport) {
+ assert (deletion_in_progress ());
+ return;
+ }
+
+ /* marks buffer as not written */
Buffer& buf (ltcport->get_buffer (nframes));
if (!ltc_encoder || !ltc_enc_buf) {