Remove closing router channels before notifying services

This commit is contained in:
evgeny committed 2026-10-24 14:44:22 +02:00
1 parent f92c78a2e0
commit 066b895055
2 files changed
+66 -2

No files matched your search

+2 -2
View File
@@ -561,12 +561,12 @@ static void router_close_and_notify(struct ETCP_ROUTER_CONN* rconn) {
if (!rconn || rconn->closed) return;
struct UTUN_INSTANCE* inst = rconn->inst;
rconn->closed = 1;
// Callback может закрыть группу или открыть новый канал с тем же ключом.
if (inst->router_conns) queue_remove_data(inst->router_conns, &rconn->ll);
router_send_close_to_service(rconn);
// Отправляем CLOSE удалённой стороне + снимаем waiter отправки
if (router_send_conn(rconn)) router_send_ctrl(rconn, ROUTER_FLAG_CLOSE);
router_conn_free_queues(rconn);
if (inst->router_conns)
queue_remove_data(inst->router_conns, &rconn->ll);
DEBUG_INFO(DEBUG_CATEGORY_ETCPROUTE, "router_conn: closed group=%016llx remote=%016llx svc_id=%u",
(unsigned long long)rconn->group_id, (unsigned long long)rconn->remote_node_id, rconn->svc_id);
uasync_call_soon(inst->ua, rconn, router_close_finalize);