mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-25 22:22:11 +00:00
BUG/MEDIUM: h2: When sending in HTX, make sure the caller knows we sent all.
In h2_snd_buf(), when running with htx, make sure we return the amount of data the caller specified, if we emptied the buffer, as it is what the caller expects, and will lead to him properly consider the buffer to be empty.
This commit is contained in:
parent
f3d480517f
commit
8122a8d681
@ -4559,6 +4559,7 @@ static void h2_stop_senders(struct h2c *h2c)
|
||||
static size_t h2_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t count, int flags)
|
||||
{
|
||||
struct h2s *h2s = cs->ctx;
|
||||
size_t orig_count = count;
|
||||
size_t total = 0;
|
||||
size_t ret;
|
||||
struct htx *htx;
|
||||
@ -4722,6 +4723,14 @@ static size_t h2_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t coun
|
||||
(h2s->flags & H2_SF_BLK_MBUSY))
|
||||
h2_stop_senders(h2s->h2c);
|
||||
|
||||
/* If we're running HTX, and we read the whole buffer, then pretend
|
||||
* we read exactly what the caller specified, as with HTX the caller
|
||||
* will always give the buffer size, instead of the amount of data
|
||||
* available.
|
||||
*/
|
||||
if (htx && !b_data(buf))
|
||||
total = orig_count;
|
||||
|
||||
if (total > 0) {
|
||||
if (!(h2s->h2c->wait_event.wait_reason & SUB_CAN_SEND))
|
||||
tasklet_wakeup(h2s->h2c->wait_event.task);
|
||||
|
Loading…
Reference in New Issue
Block a user