[nginx] SPDY: fixed connection leak while waiting for request he...
Valentin Bartenev
vbart at nginx.com
Mon Sep 30 20:39:57 UTC 2013
details: http://hg.nginx.org/nginx/rev/7e062646da6f
branches:
changeset: 5403:7e062646da6f
user: Valentin Bartenev <vbart at nginx.com>
date: Tue Oct 01 00:04:00 2013 +0400
description:
SPDY: fixed connection leak while waiting for request headers.
If an error occurs in a SPDY connection, the c->error flag is set on every fake
request connection, and its read or write event handler is called, in order to
finalize it. But while waiting for request headers, it was a no-op since the
read event handler had been set to ngx_http_empty_handler().
diffstat:
src/http/ngx_http_spdy.c | 20 +++++++++++++++++++-
1 files changed, 19 insertions(+), 1 deletions(-)
diffs (44 lines):
diff -r 4d0c70541784 -r 7e062646da6f src/http/ngx_http_spdy.c
--- a/src/http/ngx_http_spdy.c Tue Oct 01 00:00:57 2013 +0400
+++ b/src/http/ngx_http_spdy.c Tue Oct 01 00:04:00 2013 +0400
@@ -145,6 +145,8 @@ static ngx_int_t ngx_http_spdy_construct
static void ngx_http_spdy_run_request(ngx_http_request_t *r);
static ngx_int_t ngx_http_spdy_init_request_body(ngx_http_request_t *r);
+static void ngx_http_spdy_close_stream_handler(ngx_event_t *ev);
+
static void ngx_http_spdy_handle_connection_handler(ngx_event_t *rev);
static void ngx_http_spdy_keepalive_handler(ngx_event_t *rev);
static void ngx_http_spdy_finalize_connection(ngx_http_spdy_connection_t *sc,
@@ -1825,7 +1827,7 @@ ngx_http_spdy_create_stream(ngx_http_spd
rev->data = fc;
rev->ready = 1;
- rev->handler = ngx_http_empty_handler;
+ rev->handler = ngx_http_spdy_close_stream_handler;
rev->log = log;
ngx_memcpy(wev, rev, sizeof(ngx_event_t));
@@ -2615,6 +2617,22 @@ ngx_http_spdy_read_request_body(ngx_http
}
+static void
+ngx_http_spdy_close_stream_handler(ngx_event_t *ev)
+{
+ ngx_connection_t *fc;
+ ngx_http_request_t *r;
+
+ fc = ev->data;
+ r = fc->data;
+
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ "spdy close stream handler");
+
+ ngx_http_spdy_close_stream(r->spdy_stream, 0);
+}
+
+
void
ngx_http_spdy_close_stream(ngx_http_spdy_stream_t *stream, ngx_int_t rc)
{
More information about the nginx-devel
mailing list