From ab5d1c5f9113e0c240f43a5c30366a007006dae5 Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 25 Sep 2026 18:18:39 +0300 Subject: [PATCH] =?UTF-8?q?topo=5Fgroup:=20=D0=B4=D0=B8=D0=B0=D0=B3=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8=D0=BA=D0=B0=20senders=5Flist=20(new=5F?= =?UTF-8?q?conn/remove=5Fconn)=20=D0=B4=D0=BB=D1=8F=20=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20UAF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - new_conn: DEBUG_INFO ADD с conn/peer/state/ch - remove_conn: state в enter-логе, детали в !found_in_list WARN, REMOVED-лог --- src/routing_layer/topo_group.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/routing_layer/topo_group.c b/src/routing_layer/topo_group.c index a9d901f2..b4875a8b 100644 --- a/src/routing_layer/topo_group.c +++ b/src/routing_layer/topo_group.c @@ -707,6 +707,9 @@ void topo_group_new_conn(struct TOPO_GROUP* group, struct ETCP_CONN* conn) { peer_nq->conn_up |= NCONN_DIRECT; if (conn->instance->topo_sqlite_db) topo_node_sqlite_nodeinfo_updated(conn->instance->topo_sqlite_db, conn->peer_node_id); } + DEBUG_INFO(DEBUG_CATEGORY_BGP, "topo_group_new_conn: ADD conn=%p peer=%016llx state=%d grp=%016llx ch=%s", + (void*)conn, (unsigned long long)conn->peer_node_id, conn->state, + (unsigned long long)group->group_id, group->channel_id); topo_group_add_to_senders(group, conn); /* BGP — владелец conn: держим NCD-handle (если ещё нет), чтобы соединение @@ -741,11 +744,11 @@ void topo_group_remove_conn(struct TOPO_GROUP* group, struct ETCP_CONN* conn) { bool found_in_list = false; struct ll_entry* e = group->senders_list->head; while (e) { struct TOPO_GROUP_CONN_ITEM* item = (struct TOPO_GROUP_CONN_ITEM*)e->data; if (item->conn == conn) { found_in_list = true; break; } e = e->next; } - if (!found_in_list) { DEBUG_WARN(DEBUG_CATEGORY_BGP, "conn already removed or not in list, skipping"); return; } + if (!found_in_list) { DEBUG_WARN(DEBUG_CATEGORY_BGP, "topo_group_remove_conn: conn=%p peer=%016llx state=%d NOT in senders_list (already removed?), skip grp=%016llx ch=%s", (void*)conn, (unsigned long long)conn->peer_node_id, conn->state, (unsigned long long)group->group_id, group->channel_id); return; } - DEBUG_INFO(DEBUG_CATEGORY_BGP, "senders_remove conn=%p peer=%016llx name='%s' grp=%016llx", - (void*)conn, (unsigned long long)conn->peer_node_id, conn->log_name, - (unsigned long long)group->group_id); + DEBUG_INFO(DEBUG_CATEGORY_BGP, "topo_group_remove_conn: conn=%p peer=%016llx state=%d name='%s' grp=%016llx ch=%s", + (void*)conn, (unsigned long long)conn->peer_node_id, conn->state, conn->log_name, + (unsigned long long)group->group_id, group->channel_id); struct ROUTE_TABLE* rt = conn->instance->rt; int nodes_removed = 0; @@ -797,6 +800,9 @@ void topo_group_remove_conn(struct TOPO_GROUP* group, struct ETCP_CONN* conn) { item->handle = NULL; queue_remove_data(group->senders_list, e); queue_entry_free(e); + DEBUG_INFO(DEBUG_CATEGORY_BGP, "topo_group_remove_conn: REMOVED conn=%p peer=%016llx from senders_list grp=%016llx ch=%s", + (void*)conn, (unsigned long long)conn->peer_node_id, + (unsigned long long)group->group_id, group->channel_id); if (h) { node_conn_direct_close(h); DEBUG_DEBUG(DEBUG_CATEGORY_BGP, "topo_group_remove_conn: BGP handle released node=0x%016llx", (unsigned long long)conn->peer_node_id);