summaryrefslogtreecommitdiff
path: root/libs/backends/dummy
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-06-23 11:56:58 +0200
committerRobin Gareus <robin@gareus.org>2014-06-23 11:56:58 +0200
commitfb51bdb892fcb7ffe74a01becda566fd6bc9a431 (patch)
tree6dbff86da0ad7bc4ba60034308d59dbb332a2a4b /libs/backends/dummy
parent371bf59a94b12fbb08f3cccc09b8761094543d45 (diff)
statically allocate midi-options
fixes possible segfault when the data in the vector goes out of scope due to RVO.
Diffstat (limited to 'libs/backends/dummy')
-rw-r--r--libs/backends/dummy/dummy_audiobackend.cc13
-rw-r--r--libs/backends/dummy/dummy_audiobackend.h2
2 files changed, 10 insertions, 5 deletions
diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc
index cd09a64c65..dc53010443 100644
--- a/libs/backends/dummy/dummy_audiobackend.cc
+++ b/libs/backends/dummy/dummy_audiobackend.cc
@@ -32,6 +32,7 @@ using namespace ARDOUR;
static std::string s_instance_name;
size_t DummyAudioBackend::_max_buffer_size = 8192;
+std::vector<std::string> DummyAudioBackend::_midi_options;
DummyAudioBackend::DummyAudioBackend (AudioEngine& e, AudioBackendInfo& info)
: AudioBackend (e, info)
@@ -249,15 +250,17 @@ DummyAudioBackend::systemic_output_latency () const
return _systemic_output_latency;
}
+
/* MIDI */
std::vector<std::string>
DummyAudioBackend::enumerate_midi_options () const
{
- std::vector<std::string> m;
- m.push_back (_("1 in, 1 out"));
- m.push_back (_("2 in, 2 out"));
- m.push_back (_("8 in, 8 out"));
- return m;
+ if (_midi_options.empty()) {
+ _midi_options.push_back (_("1 in, 1 out"));
+ _midi_options.push_back (_("2 in, 2 out"));
+ _midi_options.push_back (_("8 in, 8 out"));
+ }
+ return _midi_options;
}
int
diff --git a/libs/backends/dummy/dummy_audiobackend.h b/libs/backends/dummy/dummy_audiobackend.h
index d4732f5eeb..638bb9f312 100644
--- a/libs/backends/dummy/dummy_audiobackend.h
+++ b/libs/backends/dummy/dummy_audiobackend.h
@@ -292,6 +292,8 @@ class DummyAudioBackend : public AudioBackend {
private:
std::string _instance_name;
+ static std::vector<std::string> _midi_options;
+
bool _running;
bool _freewheeling;