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
This commit is contained in:
Carl Hetherington 2010-08-28 12:55:53 +00:00
parent 2a69334d68
commit 9afbb649b6
2 changed files with 4 additions and 2 deletions

View File

@ -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;
};

View File

@ -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;