summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorValentin Bartenev <vbart@nginx.com>2014-01-14 16:24:45 +0400
committerValentin Bartenev <vbart@nginx.com>2014-01-14 16:24:45 +0400
commit3d5f501adceb59d7ca1b07b6bda7668786843534 (patch)
treea23dd06ecad0da06985457f33f92850c6f3c4559
parent1c56e1873387be5367737b831eba8f6b927262ba (diff)
downloadnginx-3d5f501adceb59d7ca1b07b6bda7668786843534.tar.gz
nginx-3d5f501adceb59d7ca1b07b6bda7668786843534.tar.bz2
SPDY: fixed possible premature close of stream.
The "delayed" flag always should be set if there are unsent frames, but this might not be the case if ngx_http_spdy_body_filter() was called with NULL chain. As a result, the "send_timeout" timer could be set on a stream in ngx_http_writer(). And if the timeout occurred before all the stream data has been sent, then the request was finalized with the "client timed out" error.
-rw-r--r--src/http/ngx_http_spdy_filter_module.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/http/ngx_http_spdy_filter_module.c b/src/http/ngx_http_spdy_filter_module.c
index e8cae552d..18f9ddd8a 100644
--- a/src/http/ngx_http_spdy_filter_module.c
+++ b/src/http/ngx_http_spdy_filter_module.c
@@ -635,6 +635,7 @@ ngx_http_spdy_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
if (in == NULL || r->header_only) {
if (stream->queued) {
+ fc->write->delayed = 1;
return NGX_AGAIN;
}