Mercurial > hg > nginx
changeset 4421:fbae1a82de8b
Fixed error handling in ngx_event_connect_peer().
Previously if ngx_add_event() failed a connection was freed two times (once
in the ngx_event_connect_peer(), and again by a caller) as pc->connection was
left set. Fix is to always use ngx_close_connection() to close connection
properly and set pc->connection to NULL on errors.
Patch by Piotr Sikora.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 30 Jan 2012 11:12:52 +0000 |
parents | 9ce48f9eb85b |
children | b1a9d725ab69 |
files | src/event/ngx_event_connect.c |
diffstat | 1 files changed, 5 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/event/ngx_event_connect.c Mon Jan 30 10:17:56 2012 +0000 +++ b/src/event/ngx_event_connect.c Mon Jan 30 11:12:52 2012 +0000 @@ -160,6 +160,9 @@ ngx_log_error(level, c->log, err, "connect() to %V failed", pc->name); + ngx_close_connection(c); + pc->connection = NULL; + return NGX_DECLINED; } } @@ -241,12 +244,8 @@ failed: - ngx_free_connection(c); - - if (ngx_close_socket(s) == -1) { - ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, - ngx_close_socket_n " failed"); - } + ngx_close_connection(c); + pc->connection = NULL; return NGX_ERROR; }