[nginx] Fixed background requests with asynchronous operations.
eran.kornblau at kaltura.com
Thu Jul 27 09:43:45 UTC 2017
> -----Original Message-----
> From: nginx-devel [mailto:nginx-devel-bounces at nginx.org] On Behalf Of Maxim Dounin
> Sent: Thursday, July 27, 2017 11:54 AM
> To: nginx-devel at nginx.org
> Subject: Re: [nginx] Fixed background requests with asynchronous operations.
> The NGX_AGAIN returned from a content phase handler when you started an AIO operation looks wrong: it means that nginx is already writing a response and was blocked by a full socket buffer. In this case nginx will assume it should continue writing based on socket's write events, and will close the connection as long as everything is written (no r->buffered, c->buffered is set). Before the Roman's patch the situation was the same:
> there is not r->blocking check in ngx_http_writer(), so it would close the connection as long as a write event happen for some reason.
> Rather, you should use NGX_DONE and increment r->count if you want to wait for an AIO operation result and continue processing yourself.
Thank you, Maxim, ran a quick test and returning NGX_DONE & r->main->count++ indeed solves the crash.
I'm quite sure that's what my code used to do few years ago, but then I changed it to return NGX_AGAIN,
don't remember why...
Anyway, I will test it more thoroughly and update this thread if anything comes up.
> Maxim Dounin
> nginx-devel mailing list
> nginx-devel at nginx.org
More information about the nginx-devel