mirror of
https://github.com/nginx/nginx.git
synced 2024-11-24 13:49:05 +08:00
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:
parent
b06200f3dc
commit
4a23bc5705
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user