diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2020-09-16 18:26:23 +0300 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2020-09-16 18:26:23 +0300 |
commit | a1864c25861c8cb0b972815e4cbafcf227c4f8cb (patch) | |
tree | 4a9ed1272e9f53575e26aba03ace5a89975688cb /src | |
parent | 82cf625ab51dbed91bc38bdbc21ba192df2dd4d4 (diff) | |
download | nginx-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.c | 7 |
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; } |