Brotli: use NGINX's memory pool for Brotli's memory management. Change-Id: I80135c49b116549baf9692ff2cc4927a94c2e990 Signed-off-by: Piotr Sikora <piotrsikora@google.com> Reviewed-on: https://nginx-review.googlesource.com/1233 Reviewed-by: Martin Maly <mmaly@google.com>
diff --git a/src/ngx_http_brotli_filter_module.c b/src/ngx_http_brotli_filter_module.c index e0ecc5c..4e6fdfc 100644 --- a/src/ngx_http_brotli_filter_module.c +++ b/src/ngx_http_brotli_filter_module.c
@@ -68,6 +68,8 @@ ngx_http_brotli_ctx_t *ctx); static ngx_int_t ngx_http_brotli_filter_get_buf(ngx_http_request_t *r, ngx_http_brotli_ctx_t *ctx); +static void *ngx_http_brotli_filter_alloc(void *opaque, size_t size); +static void ngx_http_brotli_filter_free(void *opaque, void *address); static void ngx_http_brotli_cleanup(void *data); static ngx_int_t ngx_http_brotli_ok(ngx_http_request_t *r); @@ -392,7 +394,9 @@ ngx_http_brotli_ctx_t *ctx; ngx_http_brotli_conf_t *conf; - encoder = BrotliEncoderCreateInstance(NULL, NULL, NULL); + encoder = BrotliEncoderCreateInstance(ngx_http_brotli_filter_alloc, + ngx_http_brotli_filter_free, + r->pool); if (encoder == NULL) { ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, "BrotliEncoderCreateInstance() failed"); @@ -667,6 +671,33 @@ } +static void * +ngx_http_brotli_filter_alloc(void *opaque, size_t size) +{ + ngx_pool_t *pool = opaque; + void *p; + + p = ngx_palloc(pool, size); + + ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pool->log, 0, + "brotli alloc: %p, size:%uz", p, size); + + return p; +} + + +static void +ngx_http_brotli_filter_free(void *opaque, void *address) +{ +#if (NGX_DEBUG) + ngx_pool_t *pool = opaque; + + ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pool->log, 0, + "brotli free: %p", address); +#endif +} + + static void ngx_http_brotli_cleanup(void *data) {