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