(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
/* 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;
}
}
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)