<html><body><div>Request pools seem short lived, but the cycle pool sticks around for a long time.</div><div><br data-mce-bogus="1"></div><div>I'm working on a custom module that has state which should persist the entire uptime of NGINX.  I was going to use an array allocated out of the cycle pool, but now I'm not sure that's a good idea.  My array could grow and potentially leak memory in the cycle pool.  Maybe the cycle pool allocation is big enough we never actually exceed the allocation and each array grow will continue to use the current allocation?  Default size is 16KB.  My module could have its own pool, but the same leak could happen within that.<br></div><div><br data-mce-bogus="1"></div><div>Would you say this was an intentional design decision or a bug?  Doesn't look like it would be hard to fix assuming my understanding of ngx_array.c is correct.<br data-mce-bogus="1"></div><div><br data-mce-bogus="1"></div><div>Joel<br data-mce-bogus="1"></div><div><br>On Oct 27, 2015, at 04:42 PM, "Valentin V. Bartenev" <vbart@nginx.com> wrote:<br><br><div><blockquote type="cite"><div class="msg-quote"><div class="_stretch"><span class="body-text-content">On Tuesday 27 October 2015 20:52:43 Joel Cunningham wrote:<br><blockquote type="cite" class="quoted-plain-text">Hi,</blockquote><blockquote type="cite" class="quoted-plain-text"><br></blockquote><blockquote type="cite" class="quoted-plain-text">I'm fairly new to the NGINX sources and have been studying ngx_array.c (from</blockquote>1.9.5), particularly how the array grows when full.<br><blockquote type="cite" class="quoted-plain-text"><br></blockquote><blockquote type="cite" class="quoted-plain-text">I'm having some confusion about how pool memory isn't leaked when the new</blockquote>array size can not fit within the current pool allocation and we call <br>ngx_palloc(). The new allocation is assigned to the local variable new, which <br>is eventually assigned to a->elts, but the old memory that was claimed out of <br>the previous pool allocation (and tracked by a->elts) isn't released/marked as <br>no longer used in the pool. I would have expected some manipulation of p-<br><blockquote type="cite" class="quoted-plain-text">d.last, similarly to how ngx_array_destroy() releases the memory from the</blockquote>pool allocation. Is there something I'm not understanding about the way array <br>uses the memory pool?<br><blockquote type="cite" class="quoted-plain-text"><br></blockquote><blockquote type="cite" class="quoted-plain-text">It seems like over time an array that continues to grow (past the current</blockquote>pool allocation) would leave memory claimed within the pool allocation that <br>it's no longer using or tracking<br><blockquote type="cite" class="quoted-plain-text"><br></blockquote><br>It's ok, since pools usually have relatively short lives.<br><br> wbr, Valentin V. Bartenev<br><br>_______________________________________________<br>nginx-devel mailing list<br><a href="mailto:nginx-devel@nginx.org" data-mce-href="mailto:nginx-devel@nginx.org">nginx-devel@nginx.org</a><br><a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel" data-mce-href="http://mailman.nginx.org/mailman/listinfo/nginx-devel">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br></span></div></div></blockquote></div></div></body></html>