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)
{