aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2020-09-16 18:26:23 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2020-09-16 18:26:23 +0300
commita1864c25861c8cb0b972815e4cbafcf227c4f8cb (patch)
tree4a9ed1272e9f53575e26aba03ace5a89975688cb /src
parent82cf625ab51dbed91bc38bdbc21ba192df2dd4d4 (diff)
downloadnginx-a1864c25861c8cb0b972815e4cbafcf227c4f8cb.tar.gz
nginx-a1864c25861c8cb0b972815e4cbafcf227c4f8cb.zip
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 (limited to 'src')
-rw-r--r--src/event/ngx_event_openssl.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
index 62b475d77..2f51b133a 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -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;
}