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