releasing memory.
Dk Jack
dnj0496 at gmail.com
Thu May 18 17:23:18 UTC 2017
Thank you Maxim,
I just want to release memory l've allocated. One more question, is the context memory automatically removed or is the module responsible for freeing it.
> On May 18, 2017, at 6:32 AM, Maxim Dounin <mdounin at mdounin.ru> wrote:
>
> Hello!
>
>> On Wed, May 17, 2017 at 05:53:40PM -0700, Dk Jack wrote:
>>
>> Hi,
>> In my module, I registered a NGX_HTTP_POST_READ_PHASE handler. When this
>> handler is invoked, I allocate my module context and attach it to the
>> request. I also allocate some other memory and save the pointers to that
>> memory in my context. In the POST_READ_PHASE handler, I also register a
>> cleanup handler to the request (r->cleanup; ngx_http_cleanup_t
>> <http://lxr.nginx.org/ident?_i=ngx_http_cleanup_t>). I assumed this is
>> called before the request is freed.
>>
>> As I expected, my cleanup handler is getting called for most of the
>> requests. However, in some cases it doesn't get called. This seems to
>> happen mostly for the first request and if and only if the request is a
>> very simple url like 'http://servername/' i.e. a simple request which tests
>> server is up and running or not. If I add anything more to the uri-path,
>> the cleanup handler gets called. Otherwise, it doesn't get called. Seems
>> very strange. Could someone more knowledgeable comment on this behavior.
>> Thanks.
>
> HTTP cleanup handlers as added by ngx_http_cleanup_add() are only
> called on premature request termination via
> ngx_http_terminate_request(). They are to be used if your module
> does something that is expected to prevent normal request closing
> (for example, via increased r->count), but want nginx to be able
> to cancel this activity if it needs to terminate the request
> prematurely for some reason (usually due to an error). For
> example, upstream module installs a http cleanup handler when it
> connects to an upstream server, and aborts the connection if the
> cleanup handler is called.
>
> These handlers are not expected to be called on normal request
> completion, if nothing prevents normal close of a request.
>
> If your goal is to simply release resources when a request is
> freed, use a r->pool cleanup handler instead, as added by
> ngx_pool_cleanup_add().
>
> --
> Maxim Dounin
> http://nginx.org/
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
More information about the nginx-devel
mailing list