summaryrefslogtreecommitdiff
path: root/libs/backends/alsa
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-08-23 04:39:12 +0200
committerRobin Gareus <robin@gareus.org>2019-08-23 04:39:12 +0200
commit8fadf44978c7116a6e6714a42ba141f61ab1b128 (patch)
treeea672d673d4f6070d2fd911d90ce0ad483df8a4f /libs/backends/alsa
parentd52cf0f739ed7606d767963d93f98422989a9d1d (diff)
Fix possible segfault when ALSA MIDI port registration fails
Diffstat (limited to 'libs/backends/alsa')
-rw-r--r--libs/backends/alsa/alsa_audiobackend.cc21
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);
}
}