mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-03-03 10:01:27 +00:00
MEDIUM: channel: do not report full when buf_empty is present on a channel
Till now we'd consider a buffer full even if it had size==0 due to pointing to buf.size. Now we change this : if buf_wanted is present, it means that we have already tried to allocate a buffer but failed. Thus the buffer must be considered full so that we stop trying to poll for reads on it. Otherwise if it's empty, it's buf_empty and we report !full since we may allocate it on the fly.
This commit is contained in:
parent
f2f7d6b27b
commit
4428a29e52
@ -176,6 +176,9 @@ static inline int buffer_empty(const struct buffer *buf)
|
||||
*/
|
||||
static inline int buffer_full(const struct buffer *b, unsigned int reserve)
|
||||
{
|
||||
if (b == &buf_empty)
|
||||
return 0;
|
||||
|
||||
return (b->i + reserve >= b->size);
|
||||
}
|
||||
|
||||
@ -282,7 +285,10 @@ static inline int buffer_work_area(const struct buffer *buf, const char *end)
|
||||
/* Return 1 if the buffer has less than 1/4 of its capacity free, otherwise 0 */
|
||||
static inline int buffer_almost_full(const struct buffer *buf)
|
||||
{
|
||||
if (buffer_total_space(buf) < buf->size / 4)
|
||||
if (buf == &buf_empty)
|
||||
return 0;
|
||||
|
||||
if (!buf->size || buffer_total_space(buf) < buf->size / 4)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
@ -129,6 +129,9 @@ static inline int channel_full(const struct channel *chn)
|
||||
{
|
||||
int rem = chn->buf->size;
|
||||
|
||||
if (chn->buf == &buf_empty)
|
||||
return 0;
|
||||
|
||||
rem -= chn->buf->o;
|
||||
rem -= chn->buf->i;
|
||||
if (!rem)
|
||||
|
Loading…
Reference in New Issue
Block a user