s->req->rex = TICK_ETERNITY;
}
- /* Call the second stream interface's I/O handler if it's embedded.
+ /* Call the stream interfaces' I/O handlers when embedded.
* Note that this one may wake the task up again.
*/
- if (s->req->cons->iohandler) {
- s->req->cons->iohandler(s->req->cons);
+ if (s->req->cons->iohandler || s->rep->cons->iohandler) {
+ if (s->req->cons->iohandler)
+ s->req->cons->iohandler(s->req->cons);
+ if (s->rep->cons->iohandler)
+ s->rep->cons->iohandler(s->rep->cons);
if (task_in_rq(t)) {
/* If we woke up, we don't want to requeue the
* task to the wait queue, but rather requeue
* the to only rely the changes the chk_* might have performed.
*/
if (/* check stream interface changes */
- (si->flags & SI_FL_ERR) || si->state != SI_ST_EST || si->ib->cons->state != SI_ST_EST ||
+ (si->flags & SI_FL_ERR) || si->state != SI_ST_EST || si->ib->cons->state > SI_ST_EST ||
/* check response buffer changes */
(si->ib->flags & (BF_READ_NULL|BF_READ_ERROR|BF_READ_DONTWAIT)) ||
((si->ib->flags & BF_READ_ACTIVITY) && !si->ib->to_forward) ||