fix: утечки памяти в router-сервисах и при shutdown
- conn_mgr_router_recv_handler / md_etcp_recv не освобождали entry (рантайм-утечка на каждое сообщение) - reality_relay: registry + shutdown hook (отложенный free не отрабатывал при остановке) - etcp_router: uasync_drain_immediate после destroy (router_close_finalize) - мелкие callback-списки: activity_cbks, node_cbks, props_cbks/apply_cbks
This commit is contained in:
1 parent
2f3001458f
commit
8a9d8d0097
7 files changed
+68
-12
No files matched your search
@@ -26,6 +26,7 @@
|
||||
#include "radio/radio.h"
|
||||
#include "radio/radio_headless.h"
|
||||
#include "stcp_server.h"
|
||||
#include "transport_layer/reality_relay.h"
|
||||
#include "control_server.h"
|
||||
#include "transport_layer/node_conn_direct.h"
|
||||
#include "transport_layer/socket_monitor.h"
|
||||
@@ -511,6 +512,7 @@ void utun_instance_destroy(struct UTUN_INSTANCE *instance) {
|
||||
|
||||
/* Phase J: TCP connections + sockets — MUST be before ETCP connections */
|
||||
stcp_server_list_destroy_all(instance);
|
||||
reality_relay_shutdown(); /* активные reality-релеи откладывают u_free через call_soon */
|
||||
if (instance->tcp_connections) {
|
||||
struct ll_entry* entry = instance->tcp_connections->head;
|
||||
int tc = 0;
|
||||
@@ -577,6 +579,9 @@ void utun_instance_destroy(struct UTUN_INSTANCE *instance) {
|
||||
|
||||
/* Phase N: etcp_router + nat_det + firewall */
|
||||
etcp_router_destroy(instance);
|
||||
/* etcp_router_destroy откладывает queue_entry_free(rconn->ll) через uasync_call_soon
|
||||
(router_close_finalize) — выкачать их, пока ua ещё жив. */
|
||||
uasync_drain_immediate(instance->ua);
|
||||
if (instance->nat_det) { nat_detection_destroy(instance->nat_det); instance->nat_det = NULL; }
|
||||
fw_free(&instance->fw);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_SYS, "[DESTROY] N done — router/nat_det/fw");
|
||||
@@ -634,6 +639,12 @@ void utun_instance_destroy(struct UTUN_INSTANCE *instance) {
|
||||
instance->nodeinfo_cbks = r->next; u_free(r);
|
||||
}
|
||||
|
||||
// Cleanup activity callback chain
|
||||
while (instance->activity_cbks) {
|
||||
struct utun_activity_cbk_entry* r = instance->activity_cbks;
|
||||
instance->activity_cbks = r->next; u_free(r);
|
||||
}
|
||||
|
||||
// Shared SQLite DB закрываем в самом конце: routing/chat/media/db_sync
|
||||
// используют его во время всего teardown (см. topo_groups_destroy).
|
||||
if (instance->topo_sqlite_db) {
|
||||
|
||||
Reference in new issue
Block a user