From 45d6379135504814ab723b57f0eb8be23393a51d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 09:24:22 +0200 Subject: Adding upstream version 1:9.16.44. Signed-off-by: Daniel Baumann --- lib/ns/lib.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 lib/ns/lib.c (limited to 'lib/ns/lib.c') diff --git a/lib/ns/lib.c b/lib/ns/lib.c new file mode 100644 index 0000000..0c4a18f --- /dev/null +++ b/lib/ns/lib.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +/*! \file */ + +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include + +/*** + *** Globals + ***/ + +LIBNS_EXTERNAL_DATA unsigned int ns_pps = 0U; + +/*** + *** Private + ***/ + +static isc_once_t init_once = ISC_ONCE_INIT; +static isc_mem_t *ns_g_mctx = NULL; +static bool initialize_done = false; +static isc_refcount_t references; + +static void +initialize(void) { + REQUIRE(!initialize_done); + + isc_mem_create(&ns_g_mctx); + + isc_refcount_init(&references, 0); + initialize_done = true; + return; +} + +isc_result_t +ns_lib_init(void) { + isc_result_t result; + + /* + * Since this routine is expected to be used by a normal application, + * it should be better to return an error, instead of an emergency + * abort, on any failure. + */ + result = isc_once_do(&init_once, initialize); + if (result != ISC_R_SUCCESS) { + return (result); + } + + if (!initialize_done) { + return (ISC_R_FAILURE); + } + + isc_refcount_increment0(&references); + + return (ISC_R_SUCCESS); +} + +void +ns_lib_shutdown(void) { + if (isc_refcount_decrement(&references) == 1) { + isc_refcount_destroy(&references); + if (ns_g_mctx != NULL) { + isc_mem_detach(&ns_g_mctx); + } + } +} -- cgit v1.2.3