]> git.kaiwu.me - nginx.git/commitdiff
SSL: fixed event handling during shutdown.
authorMaxim Dounin <mdounin@mdounin.ru>
Wed, 16 Sep 2020 15:26:23 +0000 (18:26 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Wed, 16 Sep 2020 15:26:23 +0000 (18:26 +0300)
The c->read->ready and c->write->ready flags need to be cleared to ensure
that appropriate read or write events will be reported by kernel.  Without
this, SSL shutdown might wait till the timeout after blocking on writing
or reading even if there is a socket activity.

src/event/ngx_event_openssl.c

index 62b475d777d1516113b5858224592565dd28b934..2f51b133a1b5e55561f240bd71fc4fe3a654adb7 100644 (file)
@@ -2865,6 +2865,13 @@ ngx_ssl_shutdown(ngx_connection_t *c)
             c->read->handler = ngx_ssl_shutdown_handler;
             c->write->handler = ngx_ssl_shutdown_handler;
 
+            if (sslerr == SSL_ERROR_WANT_READ) {
+                c->read->ready = 0;
+
+            } else {
+                c->write->ready = 0;
+            }
+
             if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
                 return NGX_ERROR;
             }