summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_region.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-01-03 22:09:27 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2017-01-03 22:10:05 +0000
commit0f4d61ab30fad5b34729256ed83a41955f1c93e6 (patch)
treee9493abd503a8f6118af62fe3fee7f3550d5b391 /libs/ardour/midi_region.cc
parent977cabf54a62b9c63d872c5d44a122fb5b5e305e (diff)
MidiRegion::clone() needs to ensure that the model is loaded before calling MidiSource::write_to()
Diffstat (limited to 'libs/ardour/midi_region.cc')
-rw-r--r--libs/ardour/midi_region.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc
index 9b01b03f16..bb02a79fdd 100644
--- a/libs/ardour/midi_region.cc
+++ b/libs/ardour/midi_region.cc
@@ -178,10 +178,18 @@ MidiRegion::clone (boost::shared_ptr<MidiSource> newsrc) const
Evoral::Beats const bend = bfc.from (_start + _length);
{
+ boost::shared_ptr<MidiSource> ms = midi_source(0);
+ Source::Lock lm (ms->mutex());
+
+ if (!ms->model()) {
+ ms->load_model (lm);
+ }
+
/* Lock our source since we'll be reading from it. write_to() will
- take a lock on newsrc. */
- Source::Lock lm (midi_source(0)->mutex());
- if (midi_source(0)->write_to (lm, newsrc, bbegin, bend)) {
+ take a lock on newsrc.
+ */
+
+ if (ms->write_to (lm, newsrc, bbegin, bend)) {
return boost::shared_ptr<MidiRegion> ();
}
}