diff options
| author | Maxim Dounin <mdounin@mdounin.ru> | 2013-02-01 14:37:43 +0000 |
|---|---|---|
| committer | Maxim Dounin <mdounin@mdounin.ru> | 2013-02-01 14:37:43 +0000 |
| commit | 2887c06fdecbb4eccaf69a9e7fbef55f1b49c2b5 (patch) | |
| tree | 1c682e989babfecd202ccb4eb91c418c6cd6025a | |
| parent | 733e6d2ac6c544aa1a3f42dbc93c9e6d4adf7122 (diff) | |
| download | nginx-2887c06fdecbb4eccaf69a9e7fbef55f1b49c2b5.tar.gz nginx-2887c06fdecbb4eccaf69a9e7fbef55f1b49c2b5.tar.bz2 | |
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.
| -rw-r--r-- | src/event/ngx_event_openssl.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c index 1a1498cae..b8f1cae91 100644 --- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -808,6 +808,10 @@ ngx_ssl_handshake(ngx_connection_t *c) return NGX_ERROR; } + if (ngx_handle_write_event(c->write, 0) != NGX_OK) { + return NGX_ERROR; + } + return NGX_AGAIN; } @@ -816,6 +820,10 @@ ngx_ssl_handshake(ngx_connection_t *c) c->read->handler = ngx_ssl_handshake_handler; c->write->handler = ngx_ssl_handshake_handler; + if (ngx_handle_read_event(c->read, 0) != NGX_OK) { + return NGX_ERROR; + } + if (ngx_handle_write_event(c->write, 0) != NGX_OK) { return NGX_ERROR; } |
