Fix some more crashes at session-close
PortDrop unregisters backend ports, the backend will return a NULL buffer-pointer, but the I/O object still exists (Metronome, LTC) AudioBuffer::_data == 0 #0 msvcrt!memset () from C:\Windows\System32\msvcrt.dll #1 ARDOUR::AudioBuffer::silence (this=0x2c410710, len=256, offset=0) at ../libs/ardour/audio_buffer.cc:88 #2 ARDOUR::AudioPort::cycle_end (this=0x34918730, nframes=256) at ../libs/ardour/audio_port.cc:66 #3 ARDOUR::PortManager::cycle_end (this=this@entry=0x23342770, nframes=nframes@entry=256) [process callback w/o session]
This commit is contained in:
@@ -644,6 +644,11 @@ Session::destroy ()
|
|||||||
_slave = 0;
|
_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 */
|
/* disconnect from any and all signals that we are connected to */
|
||||||
|
|
||||||
Port::PortSignalDrop (); /* EMIT SIGNAL */
|
Port::PortSignalDrop (); /* EMIT SIGNAL */
|
||||||
@@ -7071,13 +7076,14 @@ Session::operation_in_progress (GQuark op) const
|
|||||||
boost::shared_ptr<Port>
|
boost::shared_ptr<Port>
|
||||||
Session::ltc_input_port () const
|
Session::ltc_input_port () const
|
||||||
{
|
{
|
||||||
|
assert (_ltc_input);
|
||||||
return _ltc_input->nth (0);
|
return _ltc_input->nth (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::shared_ptr<Port>
|
boost::shared_ptr<Port>
|
||||||
Session::ltc_output_port () const
|
Session::ltc_output_port () const
|
||||||
{
|
{
|
||||||
return _ltc_output->nth (0);
|
return _ltc_output ? _ltc_output->nth (0) : boost::shared_ptr<Port> ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -170,6 +170,12 @@ Session::ltc_tx_send_time_code_for_cycle (framepos_t start_frame, framepos_t end
|
|||||||
pframes_t txf = 0;
|
pframes_t txf = 0;
|
||||||
boost::shared_ptr<Port> ltcport = ltc_output_port();
|
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));
|
Buffer& buf (ltcport->get_buffer (nframes));
|
||||||
|
|
||||||
if (!ltc_encoder || !ltc_enc_buf) {
|
if (!ltc_encoder || !ltc_enc_buf) {
|
||||||
|
|||||||
Reference in New Issue
Block a user