[PATCH] NGX_HTTP_SYNC flag in ngx_http_send_special

Manlio Perillo manlio.perillo at gmail.com
Sun May 6 19:22:59 UTC 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Il 06/05/2012 20:40, Maxim Dounin ha scritto:
> Hello!
> 
> On Fri, May 04, 2012 at 07:52:33PM +0200, Manlio Perillo wrote:
> 
>> Patch is attached, against mercurial mirror changeset 47cb3497fbab.
>>
>>
>> Use case:
>>
>> I'm updating my ngx_http_wsgi_module.
>>
>> In one of my test application, I return a chunk-encoded response.
>> The problem is that after last buffer is sent, I raise an exception,
>> causing Nginx to abort the request handling.
>>
> [...]
> Just ngx_http_send_special(r, NGX_HTTP_FLUSH) should be enough to 
> flush internal buffers, but please not that it doesn't mean that 
> response is actually sent - there still may be buffering on socket 
> level etc.  If you abort request handling (not sure how you do it) 
> - it may result in incomplete response sent.
> 

Well, I do not really abort the request; I simply call
ngx_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR).

> Not sure about 0.7.59, it's really old, but if you'll still see 
> the problem with 1.2.0 - please report more details, we probably 
> want to fix this properly.
> 

I finally fixed an issue that prevented ngx_http_wsgi_module to be
compiled with "recent" Nginx versions (new request->main->count
introduced in Nginx 0.8.11).

Using 1.2.0 the issue is solved.
Now Nginx returns a correct chunk encoded response, with the special
HTML text for 500 status code at the end of the response body.

It is not required to call ngx_http_send_special(r, NGX_HTTP_FLUSH).

>> Also note that I can not use NGX_HTTP_LAST (due to how
>> ngx_http_wsgi_module is implemented), and I'm not sure if is it correct
>> to set sync = 1 for a buffer that is not the last one.
> 
> Setting sync = 1 on intermediate buffers is ok, but it shouldn't 
> be needed to explicitly sent such buffers.
> 

With Nginx 0.7.59 setting sync = 1 cause response body to be truncated.
Buffers sent after sync are not received by the client.

Well, it is no more a problem now that I can use a recent version of Nginx.



Thanks  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEUEARECAAYFAk+mz5MACgkQscQJ24LbaUQE+wCfY3vl+vC1Yid9PfGJ1b7pbNOP
hWUAmN2xMEGuGBQVRqUbE629wGP2Etk=
=Wkau
-----END PGP SIGNATURE-----



More information about the nginx-devel mailing list