diff options
author | Robin Gareus <robin@gareus.org> | 2015-10-05 00:08:55 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-10-05 00:08:55 +0200 |
commit | 58d59177bbc0cc936d80efd5ec2e0a8ed368c106 (patch) | |
tree | 1c0a513672e266f48ed113286b32b603ff3aaa80 /libs/ardour/session_rtevents.cc | |
parent | e21e7f70405567781d669a83345a0f416785040d (diff) |
fix various stuck-solo cases:
* solo groups
* cancel-solo
* SIP <> AFL/PFL changes
The optimized plural-form route_solo_changed() relied on the false
premise that solo-groups and port-connections are disjoint sets.
-=-
e.g. "cancel all solo" calls set_solo(get_routes(), false);
Since All routes are affected, the "non_solo_change" set is empty, and
no changes were propagated up/downstream.
Routes that indirectly change state as group-members, wrongly end up in
the "non_solo_change" list instead of the "solo_change" list.
If a route feeds another in the same group, no changes were propagated.
Diffstat (limited to 'libs/ardour/session_rtevents.cc')
-rw-r--r-- | libs/ardour/session_rtevents.cc | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/libs/ardour/session_rtevents.cc b/libs/ardour/session_rtevents.cc index 5e20421cca..db334932f1 100644 --- a/libs/ardour/session_rtevents.cc +++ b/libs/ardour/session_rtevents.cc @@ -62,18 +62,17 @@ Session::set_solo (boost::shared_ptr<RouteList> rl, bool yn, SessionEvent::RTeve void Session::rt_set_solo (boost::shared_ptr<RouteList> rl, bool yn, bool /* group_override */) { - solo_update_disabled = true; - for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { if (!(*i)->is_auditioner()) { (*i)->set_solo (yn, this); } } - solo_update_disabled = false; - routes_solo_changed (rl); - set_dirty(); + /* XXX boost::shared_ptr<RouteList> goes out of scope here and is likley free()ed in RT context + * because boost's shared_ptr does reference counting and free/delete in the dtor. + * (this also applies to other rt_ methods here) + */ } void |