diff --git a/src/utun_instance.c b/src/utun_instance.c index d3c27a79..8cb4bf9d 100644 --- a/src/utun_instance.c +++ b/src/utun_instance.c @@ -624,6 +624,23 @@ static void instance_destroy(struct UTUN_INSTANCE* instance, int owns_config) { DEBUG_INFO(DEBUG_CATEGORY_SYS, "[INSTANCE_DESTROY] Freeing instance memory"); // Cleanup nodeinfo callback chain + while (instance->new_conn_cbks) { + struct etcp_inst_cbk_entry* entry = instance->new_conn_cbks; + instance->new_conn_cbks = entry->next; u_free(entry); + } + while (instance->link_status_cbks) { + struct etcp_link_status_cbk_entry* entry = instance->link_status_cbks; + instance->link_status_cbks = entry->next; u_free(entry); + } + while (instance->conn_status_cbks) { + struct etcp_status_cbk_entry* entry = instance->conn_status_cbks; + instance->conn_status_cbks = entry->next; u_free(entry); + } + while (instance->socket_cbks) { + struct etcp_socket_cbk_entry* entry = instance->socket_cbks; + instance->socket_cbks = entry->next; u_free(entry); + } + DEBUG_DEBUG(DEBUG_CATEGORY_SYS, "instance transport subscriptions released"); while (instance->nodeinfo_cbks) { struct nodeinfo_cbk_entry* r = instance->nodeinfo_cbks; instance->nodeinfo_cbks = r->next; u_free(r); diff --git a/tests/test_instance_contract.c b/tests/test_instance_contract.c index d94d597f..a457b906 100644 --- a/tests/test_instance_contract.c +++ b/tests/test_instance_contract.c @@ -149,7 +149,7 @@ static void test_reload(struct UASYNC* ua) { static void test_headless(struct UASYNC* ua) { char text[1024]; - snprintf(text, sizeof(text), "[global]\nmy_private_key=%s\nmy_public_key=%s\nclient_type=server\n" + snprintf(text, sizeof(text), "[global]\nmy_private_key=%s\nmy_public_key=%s\nclient_type=0\n" "[chatserver]\nheadless_control_bind=127.0.0.1:0\ncall_audio_bind=127.0.0.1:0\nradio_audio_bind=127.0.0.1:0\n", private_key, public_key); struct UTUN_INSTANCE* inst = utun_instance_create_from_str(ua, text); assert(inst && !utun_core_start(inst));