summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-06-25 01:23:03 +0200
committerRobin Gareus <robin@gareus.org>2017-06-25 01:57:19 +0200
commita1c5d1be43007265ef1257889a3138b0fa75c2ac (patch)
tree4eb20279a56b55cb2be1adfdc67e9ed541956522 /libs
parent86ee4de7a93fc4180b8ffaea1e9f569aff09dabf (diff)
Extend API to allow calling new_midi_source_path() with source_lock held
This is in preparation for cloning MIDI-sources during snapshot save.
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/session.h4
-rw-r--r--libs/ardour/session.cc11
2 files changed, 9 insertions, 6 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index bc8614be96..2da54f8bbc 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -249,7 +249,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
std::string format_audio_source_name (const std::string& legalized_base, uint32_t nchan, uint32_t chan, bool destructive, bool take_required, uint32_t cnt, bool related_exists);
std::string new_audio_source_path_for_embedded (const std::string& existing_path);
std::string new_audio_source_path (const std::string&, uint32_t nchans, uint32_t chan, bool destructive, bool take_required);
- std::string new_midi_source_path (const std::string&);
+ std::string new_midi_source_path (const std::string&, bool need_source_lock = true);
/** create a new track or bus from a template (XML path)
* @param how_many how many tracks or busses to create
* @param template_path path to xml template file
@@ -801,7 +801,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
boost::shared_ptr<Source> source_by_id (const PBD::ID&);
boost::shared_ptr<AudioFileSource> audio_source_by_path_and_channel (const std::string&, uint16_t) const;
- boost::shared_ptr<MidiSource> midi_source_by_path (const std::string&) const;
+ boost::shared_ptr<MidiSource> midi_source_by_path (const std::string&, bool need_source_lock) const;
uint32_t count_sources_by_origin (const std::string&);
void add_playlist (boost::shared_ptr<Playlist>, bool unused = false);
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index b6d4bb988c..416f972ea7 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -4887,13 +4887,16 @@ Session::audio_source_by_path_and_channel (const string& path, uint16_t chn) con
}
boost::shared_ptr<MidiSource>
-Session::midi_source_by_path (const std::string& path) const
+Session::midi_source_by_path (const std::string& path, bool need_source_lock) const
{
/* Restricted to MIDI files because audio sources require a channel
for unique identification, in addition to a path.
*/
- Glib::Threads::Mutex::Lock lm (source_lock);
+ Glib::Threads::Mutex::Lock lm (source_lock, Glib::Threads::NOT_LOCK);
+ if (need_source_lock) {
+ lm.acquire ();
+ }
for (SourceMap::const_iterator s = sources.begin(); s != sources.end(); ++s) {
boost::shared_ptr<MidiSource> ms
@@ -5194,7 +5197,7 @@ Session::new_audio_source_path (const string& base, uint32_t nchan, uint32_t cha
/** Return a unique name based on `base` for a new internal MIDI source */
string
-Session::new_midi_source_path (const string& base)
+Session::new_midi_source_path (const string& base, bool need_lock)
{
uint32_t cnt;
char buf[PATH_MAX+1];
@@ -5235,7 +5238,7 @@ Session::new_midi_source_path (const string& base)
existing++;
}
- if (midi_source_by_path (possible_path)) {
+ if (midi_source_by_path (possible_path, need_lock)) {
existing++;
}
}