From: Christopher Faulet Date: Mon, 26 Jun 2017 14:53:33 +0000 (+0200) Subject: MINOR: compression: Use a memory pool to allocate compression states X-Git-Tag: v1.8-dev3~257 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a03d4ada2611d47f4b8d4e281f1bb8b22c46f5dd;p=thirdparty%2Fhaproxy.git MINOR: compression: Use a memory pool to allocate compression states Instead of doing a malloc/free to each HTTP transaction to allocate the compression state (when the HTTP compression is enabled), we use a memory pool. --- diff --git a/src/flt_http_comp.c b/src/flt_http_comp.c index 54ffeedb1d..64c669d54d 100644 --- a/src/flt_http_comp.c +++ b/src/flt_http_comp.c @@ -32,6 +32,10 @@ static const char *http_comp_flt_id = "compression filter"; struct flt_ops comp_ops; + +/* Pools used to allocate comp_state structs */ +static struct pool_head *pool2_comp_state = NULL; + static struct buffer *tmpbuf = &buf_empty; static struct buffer *zbuf = &buf_empty; @@ -87,7 +91,8 @@ comp_start_analyze(struct stream *s, struct filter *filter, struct channel *chn) if (filter->ctx == NULL) { struct comp_state *st; - if (!(st = malloc(sizeof(*st)))) + st = pool_alloc_dirty(pool2_comp_state); + if (st == NULL) return -1; st->comp_algo = NULL; @@ -113,7 +118,7 @@ comp_end_analyze(struct stream *s, struct filter *filter, struct channel *chn) /* release any possible compression context */ if (st->comp_algo) st->comp_algo->end(&st->comp_ctx); - free(st); + pool_free2(pool2_comp_state, st); filter->ctx = NULL; end: return 1; @@ -966,4 +971,5 @@ __flt_http_comp_init(void) cfg_register_keywords(&cfg_kws); flt_register_keywords(&filter_kws); sample_register_fetches(&sample_fetch_keywords); + pool2_comp_state = create_pool("comp_state", sizeof(struct comp_state), MEM_F_SHARED); }