[nginx] SSL: fixed event handling during shutdown.

Maxim Dounin mdounin at mdounin.ru
Wed Sep 16 21:41:30 UTC 2020


details:   https://hg.nginx.org/nginx/rev/adaec579a967
branches:  
changeset: 7707:adaec579a967
user:      Maxim Dounin <mdounin at mdounin.ru>
date:      Wed Sep 16 18:26:23 2020 +0300
description:
SSL: fixed event handling during shutdown.

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.

diffstat:

 src/event/ngx_event_openssl.c |  7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diffs (17 lines):

diff -r 61011bfcdb49 -r adaec579a967 src/event/ngx_event_openssl.c
--- a/src/event/ngx_event_openssl.c	Wed Sep 16 18:26:22 2020 +0300
+++ b/src/event/ngx_event_openssl.c	Wed Sep 16 18:26:23 2020 +0300
@@ -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;
             }


More information about the nginx-devel mailing list