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/import.cc | |
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/import.cc')
-rw-r--r-- | libs/ardour/import.cc | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc index 38a3da2fdc..2b3f105879 100644 --- a/libs/ardour/import.cc +++ b/libs/ardour/import.cc @@ -354,7 +354,9 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status, boost::shared_ptr<SMFSource> smfs = boost::dynamic_pointer_cast<SMFSource> (*s); - smfs->drop_model (); + Glib::Threads::Mutex::Lock source_lock(smfs->mutex()); + + smfs->drop_model (source_lock); source->seek_to_track (i); uint64_t t = 0; @@ -384,11 +386,12 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status, } if (first) { - smfs->mark_streaming_write_started (); + smfs->mark_streaming_write_started (source_lock); first = false; } - smfs->append_event_unlocked_beats( + smfs->append_event_beats( + source_lock, Evoral::Event<Evoral::MusicalTime>( 0, Evoral::MusicalTime::ticks_at_rate(t, source->ppqn()), @@ -408,7 +411,7 @@ write_midi_data_to_new_files (Evoral::SMF* source, ImportStatus& status, const Evoral::MusicalTime length_beats = Evoral::MusicalTime::ticks_at_rate(t, source->ppqn()); BeatsFramesConverter converter(smfs->session().tempo_map(), pos); smfs->update_length(pos + converter.to(length_beats.round_up_to_beat())); - smfs->mark_streaming_write_completed (); + smfs->mark_streaming_write_completed (source_lock); if (status.cancel) { break; |