diff options
author | Robin Gareus <robin@gareus.org> | 2019-08-23 04:39:12 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-08-23 04:39:12 +0200 |
commit | 8fadf44978c7116a6e6714a42ba141f61ab1b128 (patch) | |
tree | ea672d673d4f6070d2fd911d90ce0ad483df8a4f /libs/backends/alsa | |
parent | d52cf0f739ed7606d767963d93f98422989a9d1d (diff) |
Fix possible segfault when ALSA MIDI port registration fails
Diffstat (limited to 'libs/backends/alsa')
-rw-r--r-- | libs/backends/alsa/alsa_audiobackend.cc | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index 9ef9a847b2..5dd0e9698a 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -1657,17 +1657,18 @@ AlsaAudioBackend::register_system_midi_ports(const std::string device) if (!p) { mout->stop(); delete mout; + } else { + LatencyRange lr; + lr.min = lr.max = (nfo->systemic_output_latency); + set_latency_range (p, true, lr); + static_cast<AlsaMidiPort*>(p)->set_n_periods(_periods_per_cycle); // TODO check MIDI alignment + AlsaPort *ap = static_cast<AlsaPort*>(p); + ap->set_pretty_name (replace_name_io (i->first, false)); + pthread_mutex_lock (&_device_port_mutex); + _system_midi_out.push_back (ap); + pthread_mutex_unlock (&_device_port_mutex); + _rmidi_out.push_back (mout); } - LatencyRange lr; - lr.min = lr.max = (nfo->systemic_output_latency); - set_latency_range (p, true, lr); - static_cast<AlsaMidiPort*>(p)->set_n_periods(_periods_per_cycle); // TODO check MIDI alignment - AlsaPort *ap = static_cast<AlsaPort*>(p); - ap->set_pretty_name (replace_name_io (i->first, false)); - pthread_mutex_lock (&_device_port_mutex); - _system_midi_out.push_back (ap); - pthread_mutex_unlock (&_device_port_mutex); - _rmidi_out.push_back (mout); } } |