[nginx] Fixed background requests with asynchronous operations.

Eran Kornblau 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.

Thanks,

Eran

> 
> --
> 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