diff --git a/src/stream.c b/src/stream.c index f6e1dc48f..da707550b 100644 --- a/src/stream.c +++ b/src/stream.c @@ -1589,8 +1589,11 @@ struct task *process_stream(struct task *t) (CF_SHUTR|CF_READ_ACTIVITY|CF_READ_TIMEOUT|CF_SHUTW| CF_WRITE_ACTIVITY|CF_WRITE_TIMEOUT|CF_ANA_TIMEOUT)) && !((si_f->flags | si_b->flags) & (SI_FL_EXP|SI_FL_ERR)) && - ((t->state & TASK_WOKEN_ANY) == TASK_WOKEN_TIMER)) + ((t->state & TASK_WOKEN_ANY) == TASK_WOKEN_TIMER)) { + si_f->flags &= ~SI_FL_DONT_WAKE; + si_b->flags &= ~SI_FL_DONT_WAKE; goto update_exp_and_leave; + } } /* below we may emit error messages so we have to ensure that we have @@ -1600,6 +1603,8 @@ struct task *process_stream(struct task *t) /* No buffer available, we've been subscribed to the list of * buffer waiters, let's wait for our turn. */ + si_f->flags &= ~SI_FL_DONT_WAKE; + si_b->flags &= ~SI_FL_DONT_WAKE; goto update_exp_and_leave; } @@ -2473,6 +2478,7 @@ struct task *process_stream(struct task *t) } update_exp_and_leave: + /* Note: please ensure that if you branch here you disable SI_FL_DONT_WAKE */ t->expire = tick_first(tick_first(req->rex, req->wex), tick_first(res->rex, res->wex)); if (req->analysers)