summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/region_factory.h2
-rw-r--r--libs/ardour/region_factory.cc16
-rw-r--r--libs/pbd/controllable.cc8
3 files changed, 16 insertions, 10 deletions
diff --git a/libs/ardour/ardour/region_factory.h b/libs/ardour/ardour/region_factory.h
index d9059fc19e..20ca0d355d 100644
--- a/libs/ardour/ardour/region_factory.h
+++ b/libs/ardour/ardour/region_factory.h
@@ -124,7 +124,7 @@ public:
static std::map<std::string, uint32_t> region_name_map;
static void update_region_name_map (boost::shared_ptr<Region>);
- static PBD::ScopedConnectionList region_list_connections;
+ static PBD::ScopedConnectionList* region_list_connections;
static CompoundAssociations _compound_associations;
};
diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc
index f574097fea..6af256f169 100644
--- a/libs/ardour/region_factory.cc
+++ b/libs/ardour/region_factory.cc
@@ -41,7 +41,7 @@ using namespace std;
PBD::Signal1<void,boost::shared_ptr<Region> > RegionFactory::CheckNewRegion;
Glib::StaticMutex RegionFactory::region_map_lock;
RegionFactory::RegionMap RegionFactory::region_map;
-PBD::ScopedConnectionList RegionFactory::region_list_connections;
+PBD::ScopedConnectionList* RegionFactory::region_list_connections = 0;
Glib::StaticMutex RegionFactory::region_name_map_lock;
std::map<std::string, uint32_t> RegionFactory::region_name_map;
RegionFactory::CompoundAssociations RegionFactory::_compound_associations;
@@ -321,12 +321,12 @@ RegionFactory::map_add (boost::shared_ptr<Region> r)
region_map.insert (p);
}
- r->DropReferences.connect_same_thread (region_list_connections, boost::bind (&RegionFactory::map_remove, boost::weak_ptr<Region> (r)));
+ if (!region_list_connections) {
+ region_list_connections = new ScopedConnectionList;
+ }
- r->PropertyChanged.connect_same_thread (
- region_list_connections,
- boost::bind (&RegionFactory::region_changed, _1, boost::weak_ptr<Region> (r))
- );
+ r->DropReferences.connect_same_thread (*region_list_connections, boost::bind (&RegionFactory::map_remove, boost::weak_ptr<Region> (r)));
+ r->PropertyChanged.connect_same_thread (*region_list_connections, boost::bind (&RegionFactory::region_changed, _1, boost::weak_ptr<Region> (r)));
update_region_name_map (r);
}
@@ -384,7 +384,9 @@ RegionFactory::region_by_name (const std::string& name)
void
RegionFactory::clear_map ()
{
- region_list_connections.drop_connections ();
+ if (region_list_connections) {
+ region_list_connections->drop_connections ();
+ }
{
Glib::Mutex::Lock lm (region_map_lock);
diff --git a/libs/pbd/controllable.cc b/libs/pbd/controllable.cc
index d4ceefe330..82a8464c8b 100644
--- a/libs/pbd/controllable.cc
+++ b/libs/pbd/controllable.cc
@@ -36,7 +36,7 @@ PBD::Signal1<void,Controllable*> Controllable::DeleteBinding;
Glib::StaticRWLock Controllable::registry_lock = GLIBMM_STATIC_RW_LOCK_INIT;
Controllable::Controllables Controllable::registry;
-PBD::ScopedConnectionList registry_connections;
+PBD::ScopedConnectionList* registry_connections = 0;
const std::string Controllable::xml_node_name = X_("Controllable");
Controllable::Controllable (const string& name, Flag f)
@@ -55,9 +55,13 @@ Controllable::add (Controllable& ctl)
Glib::RWLock::WriterLock lm (registry_lock);
registry.insert (&ctl);
+ if (!registry_connections) {
+ registry_connections = new ScopedConnectionList;
+ }
+
/* Controllable::remove() is static - no need to manage this connection */
- ctl.DropReferences.connect_same_thread (registry_connections, boost::bind (&Controllable::remove, &ctl));
+ ctl.DropReferences.connect_same_thread (*registry_connections, boost::bind (&Controllable::remove, &ctl));
}
void