CS_FL_ERROR = 0x00000100, /* a fatal error was reported */
CS_FL_RCV_MORE = 0x00000200, /* We may have more bytes to transfert */
CS_FL_WANT_ROOM = 0x00000400, /* More bytes to transfert, but not enough room */
+ CS_FL_ERR_PENDING = 0x00000800, /* An error is pending, but there's still data to be read */
CS_FL_EOS = 0x00001000, /* End of stream delivered to data layer */
CS_FL_REOS = 0x00002000, /* End of stream received (buffer not empty) */
CS_FL_WAIT_FOR_HS = 0x00010000, /* This stream is waiting for handhskae */
h2s_close(h2s);
if (h2s->cs) {
- h2s->cs->flags |= CS_FL_REOS | CS_FL_ERROR;
+ h2s->cs->flags |= CS_FL_REOS | CS_FL_ERR_PENDING;
if (h2s->recv_wait) {
struct wait_event *sw = h2s->recv_wait;
if (htx_is_empty(h2s_htx)) {
if (cs->flags & CS_FL_REOS)
cs->flags |= CS_FL_EOS;
+ if (cs->flags & CS_FL_ERR_PENDING)
+ cs->flags |= CS_FL_ERROR;
goto end;
}
cs->flags &= ~(CS_FL_RCV_MORE | CS_FL_WANT_ROOM);
if (cs->flags & CS_FL_REOS)
cs->flags |= CS_FL_EOS;
+ if (cs->flags & CS_FL_ERR_PENDING)
+ cs->flags |= CS_FL_ERROR;
if (b_size(&h2s->rxbuf)) {
b_free(&h2s->rxbuf);
offer_buffers(NULL, tasks_run_queue);