Browse Source

cleanup: remove dead nd_handle from CONN_MGR_HANDLE, fix double semicolons in node_conn_direct, protect close from NULL conn

topo_upd
evgeny 2 months ago
parent
commit
4ba4ab038c
  1. 9
      src/routing_layer/conn_mgr.c
  2. 4
      src/routing_layer/conn_mgr.h
  3. 40
      src/transport_layer/node_conn_direct.c

9
src/routing_layer/conn_mgr.c

@ -24,7 +24,6 @@
#include "route_ping.h" #include "route_ping.h"
#include "route_connectivity.h" #include "route_connectivity.h"
#include "conn_mgr.h" #include "conn_mgr.h"
#include "../transport_layer/node_conn_direct.h"
static struct CONN_MGR_ENTRY* cm_find_entry(struct CONN_MGR* mgr, uint64_t node_id); static struct CONN_MGR_ENTRY* cm_find_entry(struct CONN_MGR* mgr, uint64_t node_id);
static void cm_start_phase_direct(struct CONN_MGR_ENTRY* entry); static void cm_start_phase_direct(struct CONN_MGR_ENTRY* entry);
@ -209,7 +208,7 @@ static void cm_deliver_result(struct CONN_MGR_ENTRY* entry, int result) {
while (h) { while (h) {
struct CONN_MGR_HANDLE* next = h->next; struct CONN_MGR_HANDLE* next = h->next;
if (h->result_cb) h->result_cb(result, entry->node_id, h->result_arg); if (h->result_cb) h->result_cb(result, entry->node_id, h->result_arg);
h->nd_handle = NULL; h->entry = NULL; h->entry = NULL;
u_free(h); u_free(h);
h = next; h = next;
} }
@ -353,7 +352,7 @@ int conn_mgr_cancel_callback(struct CONN_MGR* mgr, uint64_t node_id,
if (h) { if (h) {
struct CONN_MGR_HANDLE** pp = &entry->handles; struct CONN_MGR_HANDLE** pp = &entry->handles;
while (*pp) { if (*pp == h) { *pp = h->next; break; } pp = &(*pp)->next; } while (*pp) { if (*pp == h) { *pp = h->next; break; } pp = &(*pp)->next; }
h->nd_handle = NULL; h->entry = NULL; u_free(h); h->entry = NULL; u_free(h);
cb_count--; cb_count--;
} }
@ -361,7 +360,7 @@ int conn_mgr_cancel_callback(struct CONN_MGR* mgr, uint64_t node_id,
cm_entry_destroy(entry); cm_entry_destroy(entry);
cm_clear_nodeinfo(mgr, node_id); cm_clear_nodeinfo(mgr, node_id);
struct CONN_MGR_HANDLE* rem = h ? entry->handles : NULL; struct CONN_MGR_HANDLE* rem = h ? entry->handles : NULL;
while (rem) { struct CONN_MGR_HANDLE* nx = rem->next; rem->nd_handle = NULL; u_free(rem); rem = nx; } while (rem) { struct CONN_MGR_HANDLE* nx = rem->next; u_free(rem); rem = nx; }
entry->handles = NULL; entry->handles = NULL;
} }
return CONN_MGR_OK; return CONN_MGR_OK;
@ -375,8 +374,6 @@ void conn_mgr_release_handle(struct CONN_MGR_HANDLE* h) {
struct CONN_MGR_HANDLE** pp = &entry->handles; struct CONN_MGR_HANDLE** pp = &entry->handles;
while (*pp) { if (*pp == h) { *pp = h->next; break; } pp = &(*pp)->next; } while (*pp) { if (*pp == h) { *pp = h->next; break; } pp = &(*pp)->next; }
if (h->nd_handle) { node_conn_direct_close(h->nd_handle); h->nd_handle = NULL; }
if (!entry->handles) { cm_entry_destroy(entry); cm_clear_nodeinfo(entry->mgr, entry->node_id); } if (!entry->handles) { cm_entry_destroy(entry); cm_clear_nodeinfo(entry->mgr, entry->node_id); }
h->entry = NULL; u_free(h); h->entry = NULL; u_free(h);
} }

4
src/routing_layer/conn_mgr.h

@ -311,9 +311,6 @@ struct CONN_MGR_INVITE_INFO_RESP {
*/ */
typedef void (*conn_mgr_connect_callback_t)(int result, uint64_t node_id, void* arg); typedef void (*conn_mgr_connect_callback_t)(int result, uint64_t node_id, void* arg);
/* forward declaration для handle */
struct NODE_CONN_DIRECT;
/** /**
* @struct CONN_MGR_HANDLE * @struct CONN_MGR_HANDLE
* @brief Универсальный handle подключения (один на каждый conn_mgr_connect_node). * @brief Универсальный handle подключения (один на каждый conn_mgr_connect_node).
@ -323,7 +320,6 @@ struct CONN_MGR_HANDLE {
uint8_t conn_type; uint8_t conn_type;
uint64_t intermediary_node_id; uint64_t intermediary_node_id;
uint64_t bridge_session_id; uint64_t bridge_session_id;
struct NODE_CONN_DIRECT* nd_handle;
conn_mgr_connect_callback_t result_cb; conn_mgr_connect_callback_t result_cb;
void* result_arg; void* result_arg;
struct CONN_MGR_HANDLE* next; struct CONN_MGR_HANDLE* next;

40
src/transport_layer/node_conn_direct.c

@ -193,9 +193,9 @@ static void ncd_down_cb(struct ETCP_CONN* conn, int event, void* arg) { (void)ev
DEBUG_INFO(DEBUG_CATEGORY_NCD, "[ncd] DOWN during fin_wait, cleaning up node=0x%016llx", (unsigned long long)entry->node_id); DEBUG_INFO(DEBUG_CATEGORY_NCD, "[ncd] DOWN during fin_wait, cleaning up node=0x%016llx", (unsigned long long)entry->node_id);
conn->fin_wait = 0; conn->fin_wait_clear_cb = NULL; conn->fin_wait_clear_arg = NULL; conn->fin_wait = 0; conn->fin_wait_clear_cb = NULL; conn->fin_wait_clear_arg = NULL;
if (entry->fin_wait_timer) { uasync_cancel_timeout(entry->ua, entry->fin_wait_timer); entry->fin_wait_timer = NULL; } if (entry->fin_wait_timer) { uasync_cancel_timeout(entry->ua, entry->fin_wait_timer); entry->fin_wait_timer = NULL; }
etcp_conn_remove_cbk(conn, ncd_init_cb, entry);; etcp_conn_remove_cbk(conn, ncd_init_cb, entry);
etcp_conn_remove_cbk(conn, ncd_up_cb, entry);; etcp_conn_remove_cbk(conn, ncd_up_cb, entry);
etcp_conn_remove_cbk(conn, ncd_down_cb, entry);; etcp_conn_remove_cbk(conn, ncd_down_cb, entry);
etcp_connection_close(conn); etcp_connection_close(conn);
ncd_registry_remove(entry); ncd_registry_remove(entry);
u_free(entry); u_free(entry);
@ -354,9 +354,9 @@ int node_conn_direct_open(struct UTUN_INSTANCE* inst, uint64_t node_id,
entry->handle_count = 1; entry->handle_count = 1;
*out_handle = h; *out_handle = h;
etcp_conn_add_cbk(conn, ncd_init_cb, entry, ETCP_CBK_EVENT_INIT);; etcp_conn_add_cbk(conn, ncd_init_cb, entry, ETCP_CBK_EVENT_INIT);
etcp_conn_add_cbk(conn, ncd_up_cb, entry, ETCP_CBK_EVENT_UP);; etcp_conn_add_cbk(conn, ncd_up_cb, entry, ETCP_CBK_EVENT_UP);
etcp_conn_add_cbk(conn, ncd_down_cb, entry, ETCP_CBK_EVENT_DOWN);; etcp_conn_add_cbk(conn, ncd_down_cb, entry, ETCP_CBK_EVENT_DOWN);
if (conn->state == 1 && entry->up) { if (conn->state == 1 && entry->up) {
uasync_call_soon(inst->ua, h, ncd_deliver_up_cb); uasync_call_soon(inst->ua, h, ncd_deliver_up_cb);
@ -421,9 +421,9 @@ int node_conn_direct_open(struct UTUN_INSTANCE* inst, uint64_t node_id,
entry->handle_count = 1; entry->handle_count = 1;
*out_handle = h; *out_handle = h;
etcp_conn_add_cbk(conn, ncd_init_cb, entry, ETCP_CBK_EVENT_INIT);; etcp_conn_add_cbk(conn, ncd_init_cb, entry, ETCP_CBK_EVENT_INIT);
etcp_conn_add_cbk(conn, ncd_up_cb, entry, ETCP_CBK_EVENT_UP);; etcp_conn_add_cbk(conn, ncd_up_cb, entry, ETCP_CBK_EVENT_UP);
etcp_conn_add_cbk(conn, ncd_down_cb, entry, ETCP_CBK_EVENT_DOWN);; etcp_conn_add_cbk(conn, ncd_down_cb, entry, ETCP_CBK_EVENT_DOWN);
int link_count = ncd_create_links(entry, ni); int link_count = ncd_create_links(entry, ni);
@ -489,9 +489,9 @@ int node_conn_direct_open_node(struct UTUN_INSTANCE* inst, uint64_t node_id,
entry->handle_count = 1; entry->handle_count = 1;
*out_handle = h; *out_handle = h;
etcp_conn_add_cbk(conn, ncd_init_cb, entry, ETCP_CBK_EVENT_INIT);; etcp_conn_add_cbk(conn, ncd_init_cb, entry, ETCP_CBK_EVENT_INIT);
etcp_conn_add_cbk(conn, ncd_up_cb, entry, ETCP_CBK_EVENT_UP);; etcp_conn_add_cbk(conn, ncd_up_cb, entry, ETCP_CBK_EVENT_UP);
etcp_conn_add_cbk(conn, ncd_down_cb, entry, ETCP_CBK_EVENT_DOWN);; etcp_conn_add_cbk(conn, ncd_down_cb, entry, ETCP_CBK_EVENT_DOWN);
if (conn->state == 1 && entry->up) { if (conn->state == 1 && entry->up) {
uasync_call_soon(inst->ua, h, ncd_deliver_up_cb); uasync_call_soon(inst->ua, h, ncd_deliver_up_cb);
@ -548,9 +548,9 @@ int node_conn_direct_open_node(struct UTUN_INSTANCE* inst, uint64_t node_id,
entry->handle_count = 1; entry->handle_count = 1;
*out_handle = h; *out_handle = h;
etcp_conn_add_cbk(conn, ncd_init_cb, entry, ETCP_CBK_EVENT_INIT);; etcp_conn_add_cbk(conn, ncd_init_cb, entry, ETCP_CBK_EVENT_INIT);
etcp_conn_add_cbk(conn, ncd_up_cb, entry, ETCP_CBK_EVENT_UP);; etcp_conn_add_cbk(conn, ncd_up_cb, entry, ETCP_CBK_EVENT_UP);
etcp_conn_add_cbk(conn, ncd_down_cb, entry, ETCP_CBK_EVENT_DOWN);; etcp_conn_add_cbk(conn, ncd_down_cb, entry, ETCP_CBK_EVENT_DOWN);
int link_count = ncd_create_links(entry, ni); int link_count = ncd_create_links(entry, ni);
@ -596,10 +596,12 @@ void node_conn_direct_close(struct NODE_CONN_DIRECT* h) {
entry->fin_wait_timer = uasync_set_timeout(entry->ua, NCD_FIN_WAIT_TIMEOUT_TB, entry, ncd_fin_wait_timeout_cb, "ncd_fin_wait"); entry->fin_wait_timer = uasync_set_timeout(entry->ua, NCD_FIN_WAIT_TIMEOUT_TB, entry, ncd_fin_wait_timeout_cb, "ncd_fin_wait");
DEBUG_INFO(DEBUG_CATEGORY_NCD, "[ncd] fin_wait started node=0x%016llx", (unsigned long long)node_id); DEBUG_INFO(DEBUG_CATEGORY_NCD, "[ncd] fin_wait started node=0x%016llx", (unsigned long long)node_id);
} else { } else {
etcp_conn_remove_cbk(conn, ncd_init_cb, entry);; if (conn) {
etcp_conn_remove_cbk(conn, ncd_up_cb, entry);; etcp_conn_remove_cbk(conn, ncd_init_cb, entry);
etcp_conn_remove_cbk(conn, ncd_down_cb, entry);; etcp_conn_remove_cbk(conn, ncd_up_cb, entry);
if (conn) etcp_connection_close(conn); etcp_conn_remove_cbk(conn, ncd_down_cb, entry);
etcp_connection_close(conn);
}
ncd_registry_remove(entry); ncd_registry_remove(entry);
u_free(entry); u_free(entry);
} }

Loading…
Cancel
Save