goto end;
}
- if (h1m->state == H1_MSG_DATA && h1m->curr_len && h1s->cs)
+ if (h1s->cs && !(h1m->flags & H1_MF_CHNK) &&
+ ((h1m->state == H1_MSG_DATA && h1m->curr_len) || (h1m->state == H1_MSG_TUNNEL)))
h1s->cs->flags |= CS_FL_MAY_SPLICE;
else if (h1s->cs)
h1s->cs->flags &= ~CS_FL_MAY_SPLICE;
TRACE_DEVEL("h1c ibuf not allocated", H1_EV_H1C_RECV|H1_EV_H1C_BLK, h1c->conn);
if (flags & CO_RFL_BUF_FLUSH) {
- if (h1m->state != H1_MSG_TUNNEL || (h1m->state == H1_MSG_DATA && h1m->curr_len)) {
+ if (h1m->state == H1_MSG_TUNNEL || (h1m->state == H1_MSG_DATA && h1m->curr_len)) {
h1s->flags |= H1S_F_BUF_FLUSH;
TRACE_STATE("flush stream's buffer", H1_EV_STRM_RECV, h1c->conn, h1s);
}
TRACE_STATE("read0 on connection", H1_EV_STRM_RECV, cs->conn, h1s);
}
- if (h1m->state != H1_MSG_DATA || !h1m->curr_len)
+ if ((h1m->state != H1_MSG_TUNNEL && h1m->state != H1_MSG_DATA) ||
+ (h1m->state == H1_MSG_DATA && !h1m->curr_len))
cs->flags &= ~CS_FL_MAY_SPLICE;
TRACE_LEAVE(H1_EV_STRM_RECV, cs->conn, h1s);