From: Miroslav Lichvar Date: Mon, 27 Jul 2020 10:13:39 +0000 (+0200) Subject: nts: fix destroying of NTS-KE client X-Git-Tag: 4.0-pre3~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e0272e55f7280aafd07dabe673f89b98f9859ca;p=thirdparty%2Fchrony.git 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. --- diff --git a/nts_ke_client.c b/nts_ke_client.c index 5cf1f8eb..604bbc5b 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); } /* ================================================== */