Mercurial > hg > nginx
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 |