diff options
| author | Valentin Bartenev <vbart@nginx.com> | 2016-07-19 20:30:21 +0300 |
|---|---|---|
| committer | Valentin Bartenev <vbart@nginx.com> | 2016-07-19 20:30:21 +0300 |
| commit | 6ebe94522a07e294121c8bbbe68e6215345aeba5 (patch) | |
| tree | e952541474bd697090c4ec480cfb07f37fa3b70e | |
| parent | b034effaf5bdc28a0fff25fd2f24eb3fb84a3b56 (diff) | |
| download | nginx-6ebe94522a07e294121c8bbbe68e6215345aeba5.tar.gz nginx-6ebe94522a07e294121c8bbbe68e6215345aeba5.tar.bz2 | |
HTTP/2: avoid sending output queue if there's nothing to send.
Particularly this fixes alerts on OS X and NetBSD systems when HTTP/2 is
configured over plain TCP sockets.
On these systems calling writev() with no data leads to EINVAL errors
being logged as "writev() failed (22: Invalid argument) while processing
HTTP/2 connection".
| -rw-r--r-- | src/http/v2/ngx_http_v2.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/http/v2/ngx_http_v2.c b/src/http/v2/ngx_http_v2.c index 7e4736b60..959e3a6f3 100644 --- a/src/http/v2/ngx_http_v2.c +++ b/src/http/v2/ngx_http_v2.c @@ -410,6 +410,16 @@ ngx_http_v2_write_handler(ngx_event_t *wev) ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http2 write handler"); + if (h2c->last_out == NULL && !c->buffered) { + + if (wev->timer_set) { + ngx_del_timer(wev); + } + + ngx_http_v2_handle_connection(h2c); + return; + } + h2c->blocked = 1; rc = ngx_http_v2_send_output_queue(h2c); |
