<div dir="ltr">Hi Valentin,<div><br><div>Than you for your fast and correct reply. </div><div><br></div><div>Yes, you are right, it was oversight that r->out->buf if taken from pipe->pool, which is actually  r->pool. </div><div>What if we pfree this bufs from  r->pool? Who holds the reference after sending these buffers (except may be in NGX_THREADS version)? </div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 12, 2016 at 2:30 PM, Valentin V. Bartenev <span dir="ltr"><<a href="mailto:vbart@nginx.com" target="_blank">vbart@nginx.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Wednesday 12 October 2016 13:22:08 George . wrote:<br>
> Hi all,<br>
><br>
> What do you think about freeing buffers after being sent by send_chain?<br>
> Because we have a special case were we use 4 megabyte buffer instead of<br>
> nginx default 8 * 8 K and we found that these buffers are actually freed<br>
> after request had been finished, so if there hundreds of slow downstream<br>
> connection nginx will eat a lot of RAM.<br>
><br>
> I'm just curious if I explicitly return already consumed buffer with<br>
> ngx_pfree  will affect something (our bunch of tests shows at least there<br>
> is not crash or unexpected behaviour)<br>
><br>
<br>
<br>
</span>Buffers are not allocated from "c->pool", so<br>
the code below does nothing except wasting CPU.<br>
<br>
And this is the only reason, why the patch doesn't<br>
break everything.<br>
<br>
  wbr, Valentin V. Bartenev<br>
<span class=""><br>
<br>
<br>
><br>
> @@ -284,6 +284,13 @@ ngx_http_write_filter(ngx_<wbr>http_request_t *r,<br>
> ngx_chain_t *in)<br>
><br>
>      chain = c->send_chain(c, r->out, limit);<br>
><br>
> +    /* free buffs that are already sent */<br>
> +    for (cl = r->out; cl; /* void */) {<br>
> +        ln = cl;<br>
> +        cl = cl->next;<br>
> +        ngx_pfree(c->pool, ln->buf);<br>
> +    }<br>
> +<br>
>      ngx_log_debug1(NGX_LOG_DEBUG_<wbr>HTTP, c->log, 0,<br>
>                     "http write filter %p", chain)<br>
<br>
</span>______________________________<wbr>_________________<br>
nginx-devel mailing list<br>
<a href="mailto:nginx-devel@nginx.org">nginx-devel@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel" rel="noreferrer" target="_blank">http://mailman.nginx.org/<wbr>mailman/listinfo/nginx-devel</a><br>
</blockquote></div><br></div>