mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 19:56:31 +01:00
Remove chicken/egg d'tor
Session::Controllables is a shared_ptr<> list. As long
as the session exists the Controllables will be around. Destroyed(*)
can only be called after the session is destroyed and releases the
shared_ptr<>
NB. this code had a nice hack to construct a "shared_from_this"
workaround. For future reference:
struct null_deleter { void operator()(void const *) const {} };
boost::shared_ptr<Controllable>(c, null_deleter())
This commit is contained in:
parent
73029d45ba
commit
ff8bd935cf
2 changed files with 0 additions and 20 deletions
|
|
@ -1079,7 +1079,6 @@ public:
|
||||||
boost::shared_ptr<AutomationControl> automation_control_by_id (const PBD::ID&);
|
boost::shared_ptr<AutomationControl> automation_control_by_id (const PBD::ID&);
|
||||||
|
|
||||||
void add_controllable (boost::shared_ptr<PBD::Controllable>);
|
void add_controllable (boost::shared_ptr<PBD::Controllable>);
|
||||||
void remove_controllable (PBD::Controllable*);
|
|
||||||
|
|
||||||
boost::shared_ptr<PBD::Controllable> solo_cut_control() const;
|
boost::shared_ptr<PBD::Controllable> solo_cut_control() const;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -208,7 +208,6 @@ Session::pre_engine_init (string fullpath)
|
||||||
SourceFactory::SourceCreated.connect_same_thread (*this, boost::bind (&Session::add_source, this, _1));
|
SourceFactory::SourceCreated.connect_same_thread (*this, boost::bind (&Session::add_source, this, _1));
|
||||||
PlaylistFactory::PlaylistCreated.connect_same_thread (*this, boost::bind (&Session::add_playlist, this, _1, _2));
|
PlaylistFactory::PlaylistCreated.connect_same_thread (*this, boost::bind (&Session::add_playlist, this, _1, _2));
|
||||||
AutomationList::AutomationListCreated.connect_same_thread (*this, boost::bind (&Session::add_automation_list, this, _1));
|
AutomationList::AutomationListCreated.connect_same_thread (*this, boost::bind (&Session::add_automation_list, this, _1));
|
||||||
Controllable::Destroyed.connect_same_thread (*this, boost::bind (&Session::remove_controllable, this, _1));
|
|
||||||
IO::PortCountChanged.connect_same_thread (*this, boost::bind (&Session::ensure_buffers, this, _1));
|
IO::PortCountChanged.connect_same_thread (*this, boost::bind (&Session::ensure_buffers, this, _1));
|
||||||
|
|
||||||
/* stop IO objects from doing stuff until we're ready for them */
|
/* stop IO objects from doing stuff until we're ready for them */
|
||||||
|
|
@ -3739,24 +3738,6 @@ Session::add_controllable (boost::shared_ptr<Controllable> c)
|
||||||
controllables.insert (c);
|
controllables.insert (c);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct null_deleter { void operator()(void const *) const {} };
|
|
||||||
|
|
||||||
void
|
|
||||||
Session::remove_controllable (Controllable* c)
|
|
||||||
{
|
|
||||||
if (deletion_in_progress()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Glib::Threads::Mutex::Lock lm (controllables_lock);
|
|
||||||
|
|
||||||
Controllables::iterator x = controllables.find (boost::shared_ptr<Controllable>(c, null_deleter()));
|
|
||||||
|
|
||||||
if (x != controllables.end()) {
|
|
||||||
controllables.erase (x);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::shared_ptr<Controllable>
|
boost::shared_ptr<Controllable>
|
||||||
Session::controllable_by_id (const PBD::ID& id)
|
Session::controllable_by_id (const PBD::ID& id)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue