13
0

MidiRegion::clone() needs to ensure that the model is loaded before calling MidiSource::write_to()

This commit is contained in:
Paul Davis 2017-01-03 22:09:27 +00:00
parent 977cabf54a
commit 0f4d61ab30

View File

@ -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> ();
}
}