|
|
|
|
@ -248,6 +248,26 @@ static void test_timeout(void* arg) {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void cleanup_instance_timers(struct UTUN_INSTANCE* instance, struct UASYNC* ua) { |
|
|
|
|
if (!instance || !ua) return; |
|
|
|
|
struct ETCP_CONN* conn = instance->connections; |
|
|
|
|
while (conn) { |
|
|
|
|
struct ETCP_LINK* link = conn->links; |
|
|
|
|
while (link) { |
|
|
|
|
if (link->keepalive_timer) { |
|
|
|
|
uasync_cancel_timeout(ua, link->keepalive_timer); |
|
|
|
|
link->keepalive_timer = NULL; |
|
|
|
|
} |
|
|
|
|
if (link->init_timer) { |
|
|
|
|
uasync_cancel_timeout(ua, link->init_timer); |
|
|
|
|
link->init_timer = NULL; |
|
|
|
|
} |
|
|
|
|
link = link->next; |
|
|
|
|
} |
|
|
|
|
conn = conn->next; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int main() { |
|
|
|
|
// Create temp config files first
|
|
|
|
|
if (create_temp_configs() != 0) { |
|
|
|
|
@ -382,6 +402,10 @@ int main() {
|
|
|
|
|
// uasync_print_resources(ua, "SHARED"); // disabled to prevent potential null deref with TUN disabled
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Explicit timer cleanup for all links (without changing library)
|
|
|
|
|
if (server_instance && ua) cleanup_instance_timers(server_instance, ua); |
|
|
|
|
if (client_instance && ua) cleanup_instance_timers(client_instance, ua); |
|
|
|
|
|
|
|
|
|
// Stop and destroy instances (safe for TUN-disabled mode)
|
|
|
|
|
if (server_instance) { |
|
|
|
|
server_instance->running = 0; |
|
|
|
|
|