IOBUF_FL_INTERIM_FF = 0x00000008, /* Producer side warn it will immediately retry a fast-forward.
* .done_fastfwd() on consumer side must take care of this flag
*/
+ IOBUF_FL_EOI = 0x00000010, /* A EOI was encountered on producer side */
};
struct iobuf {
sdo->iobuf.flags &= ~IOBUF_FL_INTERIM_FF;
+ if (se_fl_test(h1s->sd, SE_FL_EOI)) {
+ sdo->iobuf.flags |= IOBUF_FL_EOI; /* TODO: it may be good to have a flag to be sure we can
+ * forward the EOI the to consumer side
+ */
+ }
se_done_ff(sdo);
ret = total;
goto end;
head = b_peek(mbuf, b_data(mbuf) - sd->iobuf.data);
- /* FIXME: Must be handled with a flag. It is just a temporary hack */
- {
- struct xref *peer;
- struct sedesc *sdo;
-
- peer = xref_get_peer_and_lock(&h2s->sd->xref);
- if (!peer)
- goto end;
-
- sdo = container_of(peer, struct sedesc, xref);
- xref_unlock(&h2s->sd->xref, peer);
-
- if (se_fl_test(sdo, SE_FL_EOI))
- h2s->flags &= ~H2_SF_MORE_HTX_DATA;
- }
+ if (sd->iobuf.flags & IOBUF_FL_EOI)
+ h2s->flags &= ~H2_SF_MORE_HTX_DATA;
if (!(sd->iobuf.flags & IOBUF_FL_FF_BLOCKED) &&
!(h2s->flags & H2_SF_BLK_SFCTL) &&