Remove closing router channels before notifying services
This commit is contained in:
1 parent
f92c78a2e0
commit
066b895055
2 files changed
+66
-2
No files matched your search
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user