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.
This commit is contained in:
Maxim Dounin 2012-01-30 11:12:52 +00:00
parent b06200f3dc
commit 4a23bc5705

View File

@ -160,6 +160,9 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
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 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
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;
}