summaryrefslogtreecommitdiff
path: root/libs/ardour/session_rtevents.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-10-05 00:08:55 +0200
committerRobin Gareus <robin@gareus.org>2015-10-05 00:08:55 +0200
commit58d59177bbc0cc936d80efd5ec2e0a8ed368c106 (patch)
tree1c0a513672e266f48ed113286b32b603ff3aaa80 /libs/ardour/session_rtevents.cc
parente21e7f70405567781d669a83345a0f416785040d (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.cc9
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