Hello!

On Mon, Oct 28, 2013 at 2:02 PM, Maxim Dounin wrote:
>>
>> -    if (ctx->nomem) {
>> +    if (ctx->nomem || in == NULL) {
>>
>>          /* flush busy buffers */
>
> Is the same problem exists in the gunzip filter, which has very
> similar code?

Yes. I've reproduced the request hang in the gunzip filter module as
well, with the following minimal test case:

    https://github.com/chaoslawful/lua-nginx-module/commit/594f55b

>  Is a similar patch needed there?
>

Yes. I can confirm that a similar patch fixes the hang on my side.

> And, BTW, do you care to provide a Mercurial changeset, as
> suggested by nginx.org/en/docs/contributing_changes.html?  It's
> not something required, but will make sure your name will be kept
> in history as a proper person to blame.  :)
>

Here we go:

# HG changeset patch
# User Yichun Zhang <agen...@gmail.com>
# Date 1382997696 25200
# Branch gzip-flush
# Node ID 8985d6cc9a4334e954909c130e6204c6fc673d7e
# Parent  e6a1623f87bc96d5ec62b6d77356aa47dbc60756
Flush pending data when incoming chain is NULL in gzip and gunzip modules

diff -r e6a1623f87bc -r 8985d6cc9a43
src/http/modules/ngx_http_gunzip_filter_module.c
--- a/src/http/modules/ngx_http_gunzip_filter_module.c Mon Oct 21
18:20:32 2013 +0800
+++ b/src/http/modules/ngx_http_gunzip_filter_module.c Mon Oct 28
15:01:36 2013 -0700
@@ -199,7 +199,7 @@
         }
     }

-    if (ctx->nomem) {
+    if (ctx->nomem || in == NULL) {

         /* flush busy buffers */

diff -r e6a1623f87bc -r 8985d6cc9a43
src/http/modules/ngx_http_gzip_filter_module.c
--- a/src/http/modules/ngx_http_gzip_filter_module.c Mon Oct 21
18:20:32 2013 +0800
+++ b/src/http/modules/ngx_http_gzip_filter_module.c Mon Oct 28
15:01:36 2013 -0700
@@ -372,7 +372,7 @@
         r->connection->buffered |= NGX_HTTP_GZIP_BUFFERED;
     }

-    if (ctx->nomem) {
+    if (ctx->nomem || in == NULL) {

         /* flush busy buffers */
# HG changeset patch
# User Yichun Zhang <agen...@gmail.com>
# Date 1382997696 25200
# Branch gzip-flush
# Node ID 8985d6cc9a4334e954909c130e6204c6fc673d7e
# Parent  e6a1623f87bc96d5ec62b6d77356aa47dbc60756
Flush pending data when incoming chain is NULL in gzip and gunzip modules

diff -r e6a1623f87bc -r 8985d6cc9a43 src/http/modules/ngx_http_gunzip_filter_module.c
--- a/src/http/modules/ngx_http_gunzip_filter_module.c	Mon Oct 21 18:20:32 2013 +0800
+++ b/src/http/modules/ngx_http_gunzip_filter_module.c	Mon Oct 28 15:01:36 2013 -0700
@@ -199,7 +199,7 @@
         }
     }
 
-    if (ctx->nomem) {
+    if (ctx->nomem || in == NULL) {
 
         /* flush busy buffers */
 
diff -r e6a1623f87bc -r 8985d6cc9a43 src/http/modules/ngx_http_gzip_filter_module.c
--- a/src/http/modules/ngx_http_gzip_filter_module.c	Mon Oct 21 18:20:32 2013 +0800
+++ b/src/http/modules/ngx_http_gzip_filter_module.c	Mon Oct 28 15:01:36 2013 -0700
@@ -372,7 +372,7 @@
         r->connection->buffered |= NGX_HTTP_GZIP_BUFFERED;
     }
 
-    if (ctx->nomem) {
+    if (ctx->nomem || in == NULL) {
 
         /* flush busy buffers */
 
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Reply via email to