diff options
author | David Robillard <d@drobilla.net> | 2014-12-17 16:05:27 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-12-17 16:07:29 -0500 |
commit | a7067557107fc2f01586a88bb8b0a097914798ea (patch) | |
tree | c23f5f2e0386655c4d5e43ca714718e6bc1b76ac /libs/ardour/ardour/midi_playlist_source.h | |
parent | 1fa9edd872bdbfe7651c822698235434ffe59540 (diff) |
Fix various MIDI locking issues.
Attempt to make mistakes much less likely in the future by statically requiring
caller to pass scoped locks where necessary.
Diffstat (limited to 'libs/ardour/ardour/midi_playlist_source.h')
-rw-r--r-- | libs/ardour/ardour/midi_playlist_source.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/libs/ardour/ardour/midi_playlist_source.h b/libs/ardour/ardour/midi_playlist_source.h index 7a61f5aa02..f064553342 100644 --- a/libs/ardour/ardour/midi_playlist_source.h +++ b/libs/ardour/ardour/midi_playlist_source.h @@ -45,10 +45,10 @@ public: XMLNode& get_state (); int set_state (const XMLNode&, int version); - void append_event_unlocked_beats(const Evoral::Event<Evoral::MusicalTime>& ev); - void append_event_unlocked_frames(const Evoral::Event<framepos_t>& ev, framepos_t source_start); - void load_model(bool lock=true, bool force_reload=false); - void destroy_model(); + void append_event_beats(const Glib::Threads::Mutex::Lock& lock, const Evoral::Event<Evoral::MusicalTime>& ev); + void append_event_frames(const Glib::Threads::Mutex::Lock& lock, const Evoral::Event<framepos_t>& ev, framepos_t source_start); + void load_model(const Glib::Threads::Mutex::Lock& lock, bool force_reload=false); + void destroy_model(const Glib::Threads::Mutex::Lock& lock); protected: friend class SourceFactory; @@ -58,15 +58,17 @@ protected: MidiPlaylistSource (Session&, const XMLNode&); - void flush_midi(); + void flush_midi(const Lock& lock); - framecnt_t read_unlocked (Evoral::EventSink<framepos_t>& dst, + framecnt_t read_unlocked (const Lock& lock, + Evoral::EventSink<framepos_t>& dst, framepos_t position, framepos_t start, framecnt_t cnt, MidiStateTracker* tracker) const; - framecnt_t write_unlocked (MidiRingBuffer<framepos_t>& dst, + framecnt_t write_unlocked (const Lock& lock, + MidiRingBuffer<framepos_t>& dst, framepos_t position, framecnt_t cnt); |