comparison src/event/ngx_event_openssl.c @ 7707:adaec579a967

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.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 16 Sep 2020 18:26:23 +0300
parents 61011bfcdb49
children f3c87533f92c
comparison
equal deleted inserted replaced
7706:61011bfcdb49 7707:adaec579a967
2862 "SSL_get_error: %d", sslerr); 2862 "SSL_get_error: %d", sslerr);
2863 2863
2864 if (sslerr == SSL_ERROR_WANT_READ || sslerr == SSL_ERROR_WANT_WRITE) { 2864 if (sslerr == SSL_ERROR_WANT_READ || sslerr == SSL_ERROR_WANT_WRITE) {
2865 c->read->handler = ngx_ssl_shutdown_handler; 2865 c->read->handler = ngx_ssl_shutdown_handler;
2866 c->write->handler = ngx_ssl_shutdown_handler; 2866 c->write->handler = ngx_ssl_shutdown_handler;
2867
2868 if (sslerr == SSL_ERROR_WANT_READ) {
2869 c->read->ready = 0;
2870
2871 } else {
2872 c->write->ready = 0;
2873 }
2867 2874
2868 if (ngx_handle_read_event(c->read, 0) != NGX_OK) { 2875 if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
2869 return NGX_ERROR; 2876 return NGX_ERROR;
2870 } 2877 }
2871 2878