]> git.kaiwu.me - nginx.git/commitdiff
SSL: disabled sending shutdown after ngx_http_test_reading().
authorMaxim Dounin <mdounin@mdounin.ru>
Mon, 10 Aug 2020 15:52:34 +0000 (18:52 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Mon, 10 Aug 2020 15:52:34 +0000 (18:52 +0300)
Sending shutdown when ngx_http_test_reading() detects the connection is
closed can result in "SSL_shutdown() failed (SSL: ... bad write retry)"
critical log messages if there are blocked writes.

Fix is to avoid sending shutdown via the c->ssl->no_send_shutdown flag,
similarly to how it is done in ngx_http_keepalive_handler() for kqueue
when pending EOF is detected.

Reported by Jan Prachaƙ
(http://mailman.nginx.org/pipermail/nginx-devel/2018-December/011702.html).

src/http/ngx_http_request.c

index 257c4064b3a935c7d1fe9908faee230660ac54e4..f80785d8f0eaabd119d60f2e9fa9ce21afb1d8bd 100644 (file)
@@ -2992,6 +2992,12 @@ closed:
         rev->error = 1;
     }
 
+#if (NGX_HTTP_SSL)
+    if (c->ssl) {
+        c->ssl->no_send_shutdown = 1;
+    }
+#endif
+
     ngx_log_error(NGX_LOG_INFO, c->log, err,
                   "client prematurely closed connection");