[PATCH] SPDY: fixed handling of sc->length in ngx_http_spdy_state_read_data()

Xiaochen Wang wangxiaochen0 at gmail.com
Wed Mar 26 04:30:11 UTC 2014


In our production, sometimes, the disk was full. In which case, the requests
after the POST request were handled wrongly in one spdy connection.

Because the input body (DATA frame) of POST request could not be written to disk,
then ngx_http_spdy_state_read_data() tried to skip this DATA frame with wrong
sc->length, which broke spdy stream.


# HG changeset patch
# User Xiaochen Wang <wangxiaochen0 at gmail.com>
# Date 1395807655 -28800
# Node ID c18a0115c6027ad0ad475061d2984d90544d8449
# Parent  bd91f286ee0ade98e9c0f8f55bfef54a122adaf2
SPDY: fixed handling of sc->length in ngx_http_spdy_state_read_data()

diff -r bd91f286ee0a -r c18a0115c602 src/http/ngx_http_spdy.c
--- a/src/http/ngx_http_spdy.c	Mon Mar 24 16:35:44 2014 -0700
+++ b/src/http/ngx_http_spdy.c	Wed Mar 26 12:20:55 2014 +0800
@@ -1519,7 +1519,6 @@
         complete = 1;
 
     } else {
-        sc->length -= size;
         complete = 0;
     }
 
@@ -1567,6 +1566,7 @@
             buf->pos = pos;
 
             pos += size;
+            sc->length -= size;
 
             buf->end = pos;
             buf->last = pos;
@@ -1585,6 +1585,7 @@
         } else {
             buf->last = ngx_cpymem(buf->last, pos, size);
             pos += size;
+            sc->length -= size;
         }
 
         r->request_length += size;



More information about the nginx-devel mailing list