]> git.kaiwu.me - nginx.git/commitdiff
HTTP/2: avoid sending output queue if there's nothing to send.
authorValentin Bartenev <vbart@nginx.com>
Tue, 19 Jul 2016 17:30:21 +0000 (20:30 +0300)
committerValentin Bartenev <vbart@nginx.com>
Tue, 19 Jul 2016 17:30:21 +0000 (20:30 +0300)
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".

src/http/v2/ngx_http_v2.c

index 7e4736b60936714d8458c77415de384db7f590de..959e3a6f359591f4ed1803bd49c64a744b55ffaf 100644 (file)
@@ -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);