diff options
author | David Robillard <d@drobilla.net> | 2009-02-17 06:09:37 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-02-17 06:09:37 +0000 |
commit | f219a53744c3ccced52070a0ebab5fbe7f9b9895 (patch) | |
tree | 6b7e01c874b62208043b2b97150c08f89249b33b /libs/ardour/midi_source.cc | |
parent | 3f24977735b06f9b39a82d66c216ba27e3a302d5 (diff) |
Fix deadlock and potential race condition when editing MIDI.
git-svn-id: svn://localhost/ardour2/branches/3.0@4614 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_source.cc')
-rw-r--r-- | libs/ardour/midi_source.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc index b539d5b9d3..06437852c6 100644 --- a/libs/ardour/midi_source.cc +++ b/libs/ardour/midi_source.cc @@ -103,6 +103,12 @@ MidiSource::set_state (const XMLNode& node) return 0; } +void +MidiSource::invalidate () +{ + _model_iter.invalidate(); +} + nframes_t MidiSource::midi_read (MidiRingBuffer<nframes_t>& dst, nframes_t start, nframes_t cnt, nframes_t stamp_offset, nframes_t negative_stamp_offset) const @@ -114,7 +120,7 @@ MidiSource::midi_read (MidiRingBuffer<nframes_t>& dst, nframes_t start, nframes_ Evoral::Sequence<double>::const_iterator& i = _model_iter; - if (_last_read_end == 0 || start != _last_read_end) { + if (_last_read_end == 0 || start != _last_read_end || !i.valid()) { cerr << "MidiSource::midi_read seeking to frame " << start << endl; for (i = _model->begin(); i != _model->end(); ++i) { if (BEATS_TO_FRAMES(i->time()) >= start) { |