Should fix a race during Session::destroy(), Port::PortDrop
which unregisters ports with the backend, but the actual port instance
will still exist.
The engine does no longer have a session-pointer and only calls
CycleStart(); CycleEnd() to clear port-buffers. Trying to clear
and already unregistered Port will crash.
void
AudioPort::cycle_end (pframes_t nframes)
{
- if (sends_output() && !_buffer->written()) {
- if (!_buffer->data (0)) {
- get_audio_buffer (nframes);
- }
- if (_buffer->capacity() >= nframes) {
- _buffer->silence (nframes);
+ if (sends_output() && !_buffer->written() && _port_handle) {
+ if (!_buffer->data (0)) {
+ get_audio_buffer (nframes);
+ }
+ if (_buffer->capacity() >= nframes) {
+ _buffer->silence (nframes);
}
}
}
_buffer->clear ();
- if (sends_output ()) {
+ if (sends_output () && _port_handle) {
port_engine.midi_clear (port_engine.get_buffer (_port_handle, nframes));
}