Fix non-summon of butler when a track that needs it is followed by a track that does not (in the single-process-thread-CPU case). Should fix #4677.

git-svn-id: svn://localhost/ardour2/branches/3.0@11391 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington
2012-01-30 20:58:17 +00:00
parent 8f0b5a326b
commit 90bab430c4
3 changed files with 26 additions and 2 deletions

View File

@@ -308,6 +308,9 @@ AudioTrack::set_state_part_two ()
}
}
/** @param need_butler to be set to true if this track now needs the butler, otherwise it can be left alone
* or set to false.
*/
int
AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler)
{

View File

@@ -269,6 +269,9 @@ MidiTrack::set_state_part_two ()
return;
}
/** @param need_butler to be set to true if this track now needs the butler, otherwise it can be left alone
* or set to false.
*/
int
MidiTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler)
{

View File

@@ -146,6 +146,9 @@ Session::no_roll (pframes_t nframes)
return ret;
}
/** @param need_butler to be set to true by this method if it needs the butler,
* otherwise it can be left alone or set to false.
*/
int
Session::process_routes (pframes_t nframes, bool& need_butler)
{
@@ -175,16 +178,25 @@ Session::process_routes (pframes_t nframes, bool& need_butler)
(*i)->set_pending_declick (declick);
if ((ret = (*i)->roll (nframes, start_frame, end_frame, declick, need_butler)) < 0) {
bool b = false;
if ((ret = (*i)->roll (nframes, start_frame, end_frame, declick, b)) < 0) {
stop_transport ();
return -1;
}
if (b) {
need_butler = true;
}
}
}
return 0;
}
/** @param need_butler to be set to true by this method if it needs the butler,
* otherwise it must be left alone.
*/
int
Session::silent_process_routes (pframes_t nframes, bool& need_butler)
{
@@ -204,10 +216,16 @@ Session::silent_process_routes (pframes_t nframes, bool& need_butler)
continue;
}
if ((ret = (*i)->silent_roll (nframes, start_frame, end_frame, need_butler)) < 0) {
bool b = false;
if ((ret = (*i)->silent_roll (nframes, start_frame, end_frame, b)) < 0) {
stop_transport ();
return -1;
}
if (b) {
need_butler = true;
}
}
}