mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-25 20:38:03 +00:00
BUG/MEDIUM: mux-h1: make sure we always have at least one HTX block to send
Commit 84cca66
("BUG/MEDIUM: htx: When performing zero-copy, start from
the right offset.") uncovered another issue which is that the send function
may occasionally be called without any block. It's important to check for
this case when computing the zero-copy offsets.
No backport is needed.
This commit is contained in:
parent
f90db445cd
commit
37dd54d8d4
@ -1367,7 +1367,10 @@ static size_t h1_process_output(struct h1c *h1c, struct buffer *buf, size_t coun
|
||||
|
||||
if (!count)
|
||||
goto end;
|
||||
|
||||
chn_htx = htx_from_buf(buf);
|
||||
if (htx_is_empty(chn_htx))
|
||||
goto end;
|
||||
|
||||
if (!h1_get_buf(h1c, &h1c->obuf)) {
|
||||
h1c->flags |= H1C_F_OUT_ALLOC;
|
||||
@ -1383,6 +1386,7 @@ static size_t h1_process_output(struct h1c *h1c, struct buffer *buf, size_t coun
|
||||
errflag = H1S_F_REQ_ERROR;
|
||||
}
|
||||
|
||||
/* the htx is non-empty thus has at least one block */
|
||||
blk = htx_get_head_blk(chn_htx);
|
||||
|
||||
tmp = get_trash_chunk();
|
||||
@ -1407,7 +1411,7 @@ static size_t h1_process_output(struct h1c *h1c, struct buffer *buf, size_t coun
|
||||
h1c->obuf.head = sizeof(struct htx) + blk->addr;
|
||||
|
||||
if (chn_htx->used == 1 &&
|
||||
blk && htx_get_blk_type(blk) == HTX_BLK_DATA &&
|
||||
htx_get_blk_type(blk) == HTX_BLK_DATA &&
|
||||
htx_get_blk_value(chn_htx, blk).len == count) {
|
||||
void *old_area = h1c->obuf.area;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user