summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-08-28 12:55:53 +0000
committerCarl Hetherington <carl@carlh.net>2010-08-28 12:55:53 +0000
commit9afbb649b6bb39e1f04cad990b46bd6cbf004e96 (patch)
treeceb235e581b443393347af18bc1561c2d5c44679
parent2a69334d6824dce89e8543d4ce6ae5f1f0993e7f (diff)
Use weak_ptr for IOs in the bundle list to avoid holding onto them when a route is removed. Fixes #3395.
git-svn-id: svn://localhost/ardour2/branches/3.0@7702 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/port_group.cc4
-rw-r--r--gtk2_ardour/port_group.h2
2 files changed, 4 insertions, 2 deletions
diff --git a/gtk2_ardour/port_group.cc b/gtk2_ardour/port_group.cc
index f96d465564..aabe07157b 100644
--- a/gtk2_ardour/port_group.cc
+++ b/gtk2_ardour/port_group.cc
@@ -209,7 +209,8 @@ PortGroup::io_from_bundle (boost::shared_ptr<ARDOUR::Bundle> b) const
return boost::shared_ptr<IO> ();
}
- return (*i)->io;
+ boost::shared_ptr<IO> io ((*i)->io.lock ());
+ return io;
}
/** Remove bundles whose channels are already represented by other, larger bundles */
@@ -306,6 +307,7 @@ struct RouteIOs {
}
boost::shared_ptr<Route> route;
+ /* it's ok to use a shared_ptr here as RouteIOs structs are only used during ::gather () */
std::list<boost::shared_ptr<IO> > ios;
};
diff --git a/gtk2_ardour/port_group.h b/gtk2_ardour/port_group.h
index 3ae1df697d..f0bb1c4c58 100644
--- a/gtk2_ardour/port_group.h
+++ b/gtk2_ardour/port_group.h
@@ -75,7 +75,7 @@ public:
boost::shared_ptr<ARDOUR::Bundle> bundle;
/** IO whose ports are in the bundle, or 0. This is so that we can do things like adding
ports to the IO from matrix editor menus. */
- boost::shared_ptr<ARDOUR::IO> io;
+ boost::weak_ptr<ARDOUR::IO> io;
Gdk::Color colour;
bool has_colour;
PBD::ScopedConnection changed_connection;