Writing a timer event (how to execute an event from time to time)
Peter Leonov
gojpeg at gmail.com
Tue May 25 16:54:36 MSD 2010
> [...]
>> More to say, the timers mechanism is request agnostic. nginx doesn't track
>> if the timer (wev) structure is already trashed, or even the entire request
>> is freed. So you have to manage the lifetime of the timer manually.
>
> Like I said, my request is not freed because I lock responding to the
> client with http chunked response and buf->last_buf = 0. At least I
> think my request would not be freed until I call ngx_finalize_request,
> right?
Can't say for 0.7.x, but in 0.8 the request may be cleaned up before the last
buffer is sent. For example, returning NGX_ERROR from a handler would lead to
the request cleanup as soon as possible. It may be false for 0.7.
Setting up a cleanup handler seems to be a good thing to do anyway ;)
Like so:
ngx_http_cleanup_t *cln;
cln = ngx_http_cleanup_add(r, 0);
if (cln == NULL) {
return NGX_ERROR;
}
cln->data = r;
cln->handler = cleanup_handler;
static void
cleanup_handler(void *data) {
ngx_http_request_t *r;
r = data;
// here get the module context ant delete the timer
}
Best regards,
Peter.
More information about the nginx-devel
mailing list