summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-01-19 22:37:01 +0100
committerRobin Gareus <robin@gareus.org>2014-01-19 22:49:58 +0100
commitca8fa56b619fc2877d8d332316f218918e9c559e (patch)
treebcb547166b924dd73472e4f2a85ff877670a990f
parentb3dd518b224a4d63cb87d11bd306330903c96c63 (diff)
lock source list when destroying it.
-rw-r--r--libs/ardour/session.cc15
1 files changed, 9 insertions, 6 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 53d670a1f4..0f93db7128 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -526,13 +526,16 @@ Session::destroy ()
}
routes.flush ();
- DEBUG_TRACE (DEBUG::Destruction, "delete sources\n");
- for (SourceMap::iterator i = sources.begin(); i != sources.end(); ++i) {
- DEBUG_TRACE(DEBUG::Destruction, string_compose ("Dropping for source %1 ; pre-ref = %2\n", i->second->name(), i->second.use_count()));
- i->second->drop_references ();
- }
+ {
+ DEBUG_TRACE (DEBUG::Destruction, "delete sources\n");
+ Glib::Threads::Mutex::Lock lm (source_lock);
+ for (SourceMap::iterator i = sources.begin(); i != sources.end(); ++i) {
+ DEBUG_TRACE(DEBUG::Destruction, string_compose ("Dropping for source %1 ; pre-ref = %2\n", i->second->name(), i->second.use_count()));
+ i->second->drop_references ();
+ }
- sources.clear ();
+ sources.clear ();
+ }
DEBUG_TRACE (DEBUG::Destruction, "delete route groups\n");
for (list<RouteGroup *>::iterator i = _route_groups.begin(); i != _route_groups.end(); ++i) {