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:
parent
9694986a85
commit
1a288ddd95
@ -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
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user