mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-03 18:52:04 +00:00
BUG/MEDIUM: connection: Add a new CS_FL_ERR_PENDING flag to conn_streams.
Add a new flag to conn_streams, CS_FL_ERR_PENDING. This is to be set instead of CS_FL_ERR in case there's still more data to be read, so that we read all the data before closing.
This commit is contained in:
parent
d94f877cdf
commit
71748cb91b
@ -81,6 +81,7 @@ enum {
|
||||
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 */
|
||||
|
@ -1739,7 +1739,7 @@ static int h2c_handle_rst_stream(struct h2c *h2c, struct h2s *h2s)
|
||||
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;
|
||||
|
||||
@ -4595,6 +4595,8 @@ static size_t h2_rcv_buf(struct conn_stream *cs, struct buffer *buf, size_t coun
|
||||
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;
|
||||
}
|
||||
|
||||
@ -4618,6 +4620,8 @@ static size_t h2_rcv_buf(struct conn_stream *cs, struct buffer *buf, size_t coun
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user