13
0

Allow out-of-time-order writes to nascent event list, sorting before merge. Fixes #3537.

git-svn-id: svn://localhost/ardour2/branches/3.0@9103 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2011-03-08 12:34:25 +00:00
parent b88c773894
commit d2bcfc0747

View File

@ -223,6 +223,13 @@ ControlList::write_pass_finished (double when)
merge_nascent (when);
}
struct ControlEventTimeComparator {
bool operator() (ControlEvent* a, ControlEvent* b) {
return a->when < b->when;
}
};
void
ControlList::merge_nascent (double when)
{
@ -244,6 +251,8 @@ ControlList::merge_nascent (double when)
delete ninfo;
continue;
}
nascent_events.sort (ControlEventTimeComparator ());
if (ninfo->start_time < 0.0) {
ninfo->start_time = nascent_events.front()->when;
@ -372,9 +381,9 @@ ControlList::rt_add (double when, double value)
if (lm.locked()) {
assert (!nascent.empty());
if (!nascent.back()->events.empty()) {
assert (when > nascent.back()->events.back()->when);
}
/* we don't worry about adding events out of time order as we will
sort them in merge_nascent.
*/
nascent.back()->events.push_back (new ControlEvent (when, value));
}
}