]> git.kaiwu.me - nginx.git/commitdiff
SSL: disabled shutdown after connection errors.
authorMaxim Dounin <mdounin@mdounin.ru>
Wed, 16 Sep 2020 15:26:24 +0000 (18:26 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Wed, 16 Sep 2020 15:26:24 +0000 (18:26 +0300)
This fixes "SSL_shutdown() failed (SSL: ... bad write retry)" errors
as observed on the second SSL_shutdown() call after SSL shutdown fixes in
09fb2135a589 (1.19.2), notably when sending fails in ngx_http_test_expect(),
similarly to ticket #1194.

Note that there are some places where c->error is misused to prevent
further output, such as ngx_http_v2_finalize_connection() if there
are pending streams, or in filter finalization.  These places seem
to be extreme enough to don't care about missing shutdown though.
For example, filter finalization currently prevents keepalive from
being used.

src/event/ngx_event_openssl.c

index 2f51b133a1b5e55561f240bd71fc4fe3a654adb7..16dc553829bfecd3f0ba1ed6ccecbae481435a5d 100644 (file)
@@ -2805,7 +2805,7 @@ ngx_ssl_shutdown(ngx_connection_t *c)
         return NGX_OK;
     }
 
-    if (c->timedout) {
+    if (c->timedout || c->error) {
         mode = SSL_RECEIVED_SHUTDOWN|SSL_SENT_SHUTDOWN;
         SSL_set_quiet_shutdown(c->ssl->connection, 1);