etcp: tcp_link_close_cb — сохранять link поля до каскада (UAF local_link_id)
This commit is contained in:
1 parent
187bcd80b9
commit
1f8ccabdbf
1 file changed
+8
-5
@@ -1256,24 +1256,27 @@ static void tcp_link_close_cb(struct stcp_link *sl, int err, void *arg) {
|
||||
struct ETCP_LINK *link = (struct ETCP_LINK *)arg;
|
||||
if (!link || !link->etcp) return;
|
||||
if (link->etcp->state == 2) return;
|
||||
/* Сохраняем до каскада: etcp_on_link_down может закрыть conn и освободить link */
|
||||
int old_state = link->link_state;
|
||||
struct ETCP_CONN *etcp = link->etcp; /* сохранить до каскада: etcp_on_link_down может закрыть conn и освободить link */
|
||||
int is_server = link->is_server;
|
||||
int local_link_id = link->local_link_id;
|
||||
struct ETCP_CONN *etcp = link->etcp;
|
||||
stcp_link_close(sl);
|
||||
link->tcp_link = NULL;
|
||||
|
||||
etcp_fire_link_status_cbk(link, old_state, 0);
|
||||
|
||||
if (link->is_server) {
|
||||
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] TCP server link %d down err=%d, closing", link->etcp->log_name, link->local_link_id, err);
|
||||
if (is_server) {
|
||||
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] TCP server link %d down err=%d, closing", etcp->log_name, local_link_id, err);
|
||||
etcp_on_link_down(etcp, link);
|
||||
if (etcp->state != 2) {
|
||||
etcp_link_close(link);
|
||||
} else {
|
||||
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] TCP server link %d already closed by conn teardown, skip",
|
||||
etcp->log_name, link->local_link_id);
|
||||
etcp->log_name, local_link_id);
|
||||
}
|
||||
} else {
|
||||
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] TCP link %d down err=%d, scheduling reconnect", link->etcp->log_name, link->local_link_id, err);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] TCP link %d down err=%d, scheduling reconnect", etcp->log_name, local_link_id, err);
|
||||
etcp_on_link_down(etcp, link);
|
||||
if (etcp->state != 2) etcp_tcp_link_start_reconnect(link);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user