freeing buffers after sending them

George . george at
Wed Oct 12 10:22:08 UTC 2016

Hi all,

What do you think about freeing buffers after being sent by send_chain?
Because we have a special case were we use 4 megabyte buffer instead of
nginx default 8 * 8 K and we found that these buffers are actually freed
after request had been finished, so if there hundreds of slow downstream
connection nginx will eat a lot of RAM.

I'm just curious if I explicitly return already consumed buffer with
ngx_pfree  will affect something (our bunch of tests shows at least there
is not crash or unexpected behaviour)

@@ -284,6 +284,13 @@ ngx_http_write_filter(ngx_http_request_t *r,
ngx_chain_t *in)

     chain = c->send_chain(c, r->out, limit);

+    /* free buffs that are already sent */
+    for (cl = r->out; cl; /* void */) {
+        ln = cl;
+        cl = cl->next;
+        ngx_pfree(c->pool, ln->buf);
+    }
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
                    "http write filter %p", chain)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the nginx-devel mailing list