diff --git a/src/session.c b/src/session.c index 10c7f13d6..acd977031 100644 --- a/src/session.c +++ b/src/session.c @@ -1821,11 +1821,14 @@ resync_stream_interface: 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 diff --git a/src/stream_interface.c b/src/stream_interface.c index 113f01c65..9d2f9c5eb 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -142,7 +142,7 @@ void stream_int_update_embedded(struct stream_interface *si) * 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) ||