From 3e0272e55f7280aafd07dabe673f89b98f9859ca Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Mon, 27 Jul 2020 12:13:39 +0200 Subject: [PATCH] nts: fix destroying of NTS-KE client Destroy the NTS-KE session of the client immediately even when the resolver of the NTP address is running. This removes the session local change handler and avoids an assertion failure in the local finalization. --- nts_ke_client.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/nts_ke_client.c b/nts_ke_client.c index 5cf1f8e..604bbc5 100644 --- a/nts_ke_client.c +++ b/nts_ke_client.c @@ -72,7 +72,7 @@ name_resolve_handler(DNS_Status status, int n_addrs, IPAddr *ip_addrs, void *arg inst->resolving_name = 0; if (inst->destroying) { - NKC_DestroyInstance(inst); + Free(inst); return; } @@ -292,22 +292,24 @@ NKC_CreateInstance(IPSockAddr *address, const char *name) void NKC_DestroyInstance(NKC_Instance inst) { - /* If the resolver is running, destroy the instance later when finished */ - if (inst->resolving_name) { - inst->destroying = 1; - return; - } - NKSN_DestroyInstance(inst->session); Free(inst->name); - Free(inst); client_credentials_refs--; if (client_credentials_refs <= 0 && client_credentials) { NKSN_DestroyCertCredentials(client_credentials); client_credentials = NULL; } + + /* If the asynchronous resolver is running, let the handler free + the instance later */ + if (inst->resolving_name) { + inst->destroying = 1; + return; + } + + Free(inst); } /* ================================================== */