Writing a timer event (how to execute an event from time to time)
mdounin at mdounin.ru
Tue May 25 17:13:29 MSD 2010
On Tue, May 25, 2010 at 08:35:15AM -0300, Rogério Schneider wrote:
> > Each request may clean its pool when finalizing the request. And the timer
> > uses the pool attached with that request. This caused the segfaults.
> In fact the segfault occurs before the request/response end. Since I
> am responding with http chunked, and buf->last_buf = 0, the client
> stills connected and "downloading the stream" for an infinite time.
Not setting last_buf doesn't mean that request will not be
finalized and freed. As soon as you return from content handler -
ngx_http_finalize_request() will be called, and it will free
request as long as r->main->count == 1.
If you want request to persist for other actions - you have to
increment r->main->count (and decrement it via calling
ngx_http_finalize_request() once you're done) and return NGX_DONE
from content handler.
See memcached (+ upstream) module, and perl module for examples in
nginx code. Set ngx_http_request.c and ngx_http_core_module.c for
details about request processing.
More information about the nginx-devel