comparison src/event/ngx_event_openssl.c @ 5024:03513220b83b

SSL: fixed ngx_ssl_handshake() with level-triggered event methods. Missing calls to ngx_handle_write_event() and ngx_handle_read_event() resulted in a CPU hog during SSL handshake if an level-triggered event method (e.g. select) was used.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 01 Feb 2013 14:37:43 +0000
parents 70a35b7b63ea
children bebcc2f837d3
comparison
equal deleted inserted replaced
5023:70a35b7b63ea 5024:03513220b83b
806 806
807 if (ngx_handle_read_event(c->read, 0) != NGX_OK) { 807 if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
808 return NGX_ERROR; 808 return NGX_ERROR;
809 } 809 }
810 810
811 if (ngx_handle_write_event(c->write, 0) != NGX_OK) {
812 return NGX_ERROR;
813 }
814
811 return NGX_AGAIN; 815 return NGX_AGAIN;
812 } 816 }
813 817
814 if (sslerr == SSL_ERROR_WANT_WRITE) { 818 if (sslerr == SSL_ERROR_WANT_WRITE) {
815 c->write->ready = 0; 819 c->write->ready = 0;
816 c->read->handler = ngx_ssl_handshake_handler; 820 c->read->handler = ngx_ssl_handshake_handler;
817 c->write->handler = ngx_ssl_handshake_handler; 821 c->write->handler = ngx_ssl_handshake_handler;
822
823 if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
824 return NGX_ERROR;
825 }
818 826
819 if (ngx_handle_write_event(c->write, 0) != NGX_OK) { 827 if (ngx_handle_write_event(c->write, 0) != NGX_OK) {
820 return NGX_ERROR; 828 return NGX_ERROR;
821 } 829 }
822 830