Cancel UDP route probes with their contexts before socket teardown
This commit is contained in:
1 parent
ceab874abc
commit
99382cf823
1 file changed
+3
-3
@@ -450,9 +450,8 @@ void route_connectivity_probe_node(struct UTUN_INSTANCE* instance, struct TOPO_G
|
||||
}
|
||||
}
|
||||
|
||||
/* Отсоединяет все влётные пробы узла: зануляет ctx->nq (чтобы conn_probe_finish не
|
||||
* трогал освобождаемый nq) и досрочно закрывает влётные TCP-пинги. UDP-пробы не имеют
|
||||
* хендла — они отсоединяются и освобождаются своим штатным ping_timeout/PONG. */
|
||||
/* Отменяет все пробы узла и освобождает контексты до закрытия сокетов/группы.
|
||||
* TCP destroy вызывает callback; UDP cancel удаляет pending без callback. */
|
||||
static void conn_probe_cancel_nq(struct TOPO_GROUP_NODE* nq) {
|
||||
if (!nq) return;
|
||||
struct route_nat_defer *deferred = nq->connectivity.nat_probe_wait;
|
||||
@@ -478,6 +477,7 @@ static void conn_probe_cancel_nq(struct TOPO_GROUP_NODE* nq) {
|
||||
ctx->nq = NULL;
|
||||
struct stcp_client* cli = ctx->tcp_cli;
|
||||
if (cli) stcp_client_destroy(cli); // синхронно: ping_close_cb → conn_probe_finish → u_free(ctx)
|
||||
else { etcp_cancel_pings(ctx->instance, conn_probe_single_cb, ctx); u_free(ctx); }
|
||||
ctx = next;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user