summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Blum2012-10-13 16:17:34 -0700
committerJosh Blum2012-10-13 16:17:34 -0700
commitac9abbbcfdbc5efc715ea49bb0319b2408cca359 (patch)
tree6aef972d9265226c428cc962674fbb0dd6b5b727
parentb0e1ca63f8db775557d155b6b7d703f3bf251386 (diff)
downloadsandhi-ac9abbbcfdbc5efc715ea49bb0319b2408cca359.tar.gz
sandhi-ac9abbbcfdbc5efc715ea49bb0319b2408cca359.tar.bz2
sandhi-ac9abbbcfdbc5efc715ea49bb0319b2408cca359.zip
tweaks to forecast exit logic
-rw-r--r--lib/block_task.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/block_task.cpp b/lib/block_task.cpp
index fac70c0..96283d7 100644
--- a/lib/block_task.cpp
+++ b/lib/block_task.cpp
@@ -198,17 +198,19 @@ void BlockActor::handle_task(void)
{
if (fcast_ninput_items[i] <= work_ninput_items[i]) continue;
- const size_t work_noutput_items_last = work_noutput_items;
+ if (work_noutput_items <= this->output_multiple_items)
+ {
+ //handle the case of forecast failing
+ //TODO accumulate input here, only done if inputs done and already accumulated
+ if (this->inputs_done[i]) this->mark_done();
+ return;
+ }
+
work_noutput_items = work_noutput_items/2; //backoff regime
work_noutput_items += this->output_multiple_items-1;
work_noutput_items /= this->output_multiple_items;
work_noutput_items *= this->output_multiple_items;
- if (work_noutput_items and work_noutput_items_last != work_noutput_items) goto forecast_again_you_jerk;
-
- //handle the case of forecast failing
- //TODO accumulate input here, only done if inputs done and already accumulated
- if (this->inputs_done[i]) this->mark_done();
- return;
+ goto forecast_again_you_jerk;
}
}