return b_almost_full(buf);
}
+/* Return 1 if <sz> is the default buffer size */
+static inline int b_is_default_sz(size_t sz)
+{
+ return (sz == pool_head_buffer->size);
+}
+
+/* Return 1 if <sz> is the size of a large buffer (alwoys false is large buffers are not configured) */
+static inline int b_is_large_sz(size_t sz)
+{
+ return (pool_head_large_buffer && sz == pool_head_large_buffer->size);
+}
+
+/* Return 1 if <bug> is a default buffer */
+static inline int b_is_default(struct buffer *buf)
+{
+ return b_is_default_sz(b_size(buf));
+}
+
+/* Return 1 if <buf> is a large buffer (alwoys 0 is large buffers are not configured) */
+static inline int b_is_large(struct buffer *buf)
+{
+ return b_is_large_sz(b_size(buf));
+}
+
/**************************************************/
/* Functions below are used for buffer allocation */
/**************************************************/
__ha_barrier_store(); \
/* if enabled, large buffers are always strictly greater \
* than the default buffers */ \
- if (unlikely(pool_head_large_buffer && sz == pool_head_large_buffer->size)) \
+ if (unlikely(b_is_large_sz(sz))) \
pool_free(pool_head_large_buffer, area); \
else if (th_ctx->emergency_bufs_left < global.tune.reserved_bufs) \
th_ctx->emergency_bufs[th_ctx->emergency_bufs_left++] = area; \
struct buffer lbuf;
char *area;
- if (large_buffer == 0 || c_size(chn) == global.tune.bufsize_large)
+ if (large_buffer == 0 || b_is_large(&chn->buf))
goto end; /* don't use large buffer or large buffer is full */
/* normal buffer is full, allocate a large one
b_dequeue(&s->buffer_wait);
if (s->req.buf.size || s->res.buf.size) {
- int count = (s->req.buf.size == global.tune.bufsize) + (s->res.buf.size == global.tune.bufsize);
+ int count = 0;
+
+ if (b_is_default(&s->req.buf))
+ count++;
+ if (b_is_default(&s->res.buf))
+ count++;
b_free(&s->req.buf);
b_free(&s->res.buf);
- offer_buffers(NULL, count);
+ if (count)
+ offer_buffers(NULL, count);
}
pool_free(pool_head_uniqueid, s->unique_id.ptr);
int offer = 0;
if (c_size(&s->req) && c_empty(&s->req)) {
- if (c_size(&s->req) == global.tune.bufsize)
+ if (b_is_default(&s->req.buf))
offer++;
b_free(&s->req.buf);
}
if (c_size(&s->res) && c_empty(&s->res)) {
- if (c_size(&s->res) == global.tune.bufsize)
+ if (b_is_default(&s->res.buf))
offer++;
b_free(&s->res.buf);
}