aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2013-02-01 14:37:43 +0000
committerMaxim Dounin <mdounin@mdounin.ru>2013-02-01 14:37:43 +0000
commit2887c06fdecbb4eccaf69a9e7fbef55f1b49c2b5 (patch)
tree1c682e989babfecd202ccb4eb91c418c6cd6025a /src
parent733e6d2ac6c544aa1a3f42dbc93c9e6d4adf7122 (diff)
downloadnginx-2887c06fdecbb4eccaf69a9e7fbef55f1b49c2b5.tar.gz
nginx-2887c06fdecbb4eccaf69a9e7fbef55f1b49c2b5.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_openssl.c8
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;
}