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/ardour | |
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/ardour')
-rw-r--r-- | libs/ardour/ardour/midi_source.h | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/source.h | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h index 0bc431a8d8..b17f78b912 100644 --- a/libs/ardour/ardour/midi_source.h +++ b/libs/ardour/ardour/midi_source.h @@ -85,6 +85,11 @@ class MidiSource : virtual public Source virtual void load_model(bool lock=true, bool force_reload=false) = 0; virtual void destroy_model() = 0; + /** This must be called with the source lock held whenever the + * source/model contents have been changed (reset iterators/cache/etc). + */ + void invalidate(); + void set_note_mode(NoteMode mode); void set_timeline_position (int64_t pos); diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h index 943b7b444c..d89c33c749 100644 --- a/libs/ardour/ardour/source.h +++ b/libs/ardour/ardour/source.h @@ -115,8 +115,9 @@ class Source : public SessionObject, public ARDOUR::Readable, public boost::nonc virtual const Evoral::TimeConverter<double, nframes_t>& time_converter() const { return Evoral::IdentityConverter<double, nframes_t>(); } - - Flag flags() const { return _flags; } + + Glib::Mutex& mutex() { return _lock; } + Flag flags() const { return _flags; } protected: DataType _type; |