]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Improve reporting for pthread_once errors
authorOndřej Surý <ondrej@isc.org>
Fri, 14 Oct 2022 14:10:41 +0000 (16:10 +0200)
committerOndřej Surý <ondrej@isc.org>
Fri, 14 Oct 2022 14:39:21 +0000 (16:39 +0200)
Replace all uses of RUNTIME_CHECK() in lib/isc/include/isc/once.h with
PTHEADS_RUNTIME_CHECK(), in order to improve error reporting for any
once-related run-time failures (by augmenting error messages with
file/line/caller information and the error string corresponding to
errno).

bin/named/statschannel.c
lib/dns/acl.c
lib/dns/db.c
lib/dns/dlz.c
lib/dns/dyndb.c
lib/dns/rdata/in_1/wks_11.c
lib/isc/hash.c
lib/isc/include/isc/once.h
lib/isc/mem.c
lib/isc/mutex.c
lib/isc/net.c

index c2ef1cff6e994796bfd0ae7cbce23ca4cd75b703..801878e2bca4227da5b05ec7374e86c721a86aab 100644 (file)
@@ -3726,7 +3726,7 @@ named_statschannels_configure(named_server_t *server, const cfg_obj_t *config,
        const cfg_listelt_t *element, *element2;
        char socktext[ISC_SOCKADDR_FORMATSIZE];
 
-       RUNTIME_CHECK(isc_once_do(&once, init_desc) == ISC_R_SUCCESS);
+       isc_once_do(&once, init_desc);
 
        ISC_LIST_INIT(new_listeners);
 
@@ -3883,7 +3883,7 @@ named_stats_dump(named_server_t *server, FILE *fp) {
        uint64_t sockstat_values[isc_sockstatscounter_max];
        uint64_t gluecachestats_values[dns_gluecachestatscounter_max];
 
-       RUNTIME_CHECK(isc_once_do(&once, init_desc) == ISC_R_SUCCESS);
+       isc_once_do(&once, init_desc);
 
        /* Set common fields */
        dumparg.type = isc_statsformat_file;
index c43713f10e3ab288c0033b29851febe61d082cdd..09f39bf28fa9a6f8fdf904bf8f95ac70a2a98ce9 100644 (file)
@@ -616,8 +616,7 @@ dns_acl_isinsecure(const dns_acl_t *a) {
        unsigned int i;
        bool insecure;
 
-       RUNTIME_CHECK(isc_once_do(&insecure_prefix_once, initialize_action) ==
-                     ISC_R_SUCCESS);
+       isc_once_do(&insecure_prefix_once, initialize_action);
 
        /*
         * Walk radix tree to find out if there are any non-negated,
index 9d894ccd7a445c83071f719ba631676b6e72d412..c0b71599c2c4f2fc8ed9711afa9d766b57abd89b 100644 (file)
@@ -106,7 +106,7 @@ dns_db_create(isc_mem_t *mctx, const char *db_type, const dns_name_t *origin,
              char *argv[], dns_db_t **dbp) {
        dns_dbimplementation_t *impinfo;
 
-       RUNTIME_CHECK(isc_once_do(&once, initialize) == ISC_R_SUCCESS);
+       isc_once_do(&once, initialize);
 
        /*
         * Create a new database using implementation 'db_type'.
@@ -841,7 +841,7 @@ dns_db_register(const char *name, dns_dbcreatefunc_t create, void *driverarg,
        REQUIRE(name != NULL);
        REQUIRE(dbimp != NULL && *dbimp == NULL);
 
-       RUNTIME_CHECK(isc_once_do(&once, initialize) == ISC_R_SUCCESS);
+       isc_once_do(&once, initialize);
 
        RWLOCK(&implock, isc_rwlocktype_write);
        imp = impfind(name);
@@ -871,7 +871,7 @@ dns_db_unregister(dns_dbimplementation_t **dbimp) {
 
        REQUIRE(dbimp != NULL && *dbimp != NULL);
 
-       RUNTIME_CHECK(isc_once_do(&once, initialize) == ISC_R_SUCCESS);
+       isc_once_do(&once, initialize);
 
        imp = *dbimp;
        *dbimp = NULL;
index f99f6fcd6cfb35229b53d21aa76ab6fb9aad2d0c..75159439124d3f8976bb4fad95f473051bca5cd5 100644 (file)
@@ -166,7 +166,7 @@ dns_dlzcreate(isc_mem_t *mctx, const char *dlzname, const char *drivername,
         * initialize the dlz_implementations list, this is guaranteed
         * to only really happen once.
         */
-       RUNTIME_CHECK(isc_once_do(&once, dlz_initialize) == ISC_R_SUCCESS);
+       isc_once_do(&once, dlz_initialize);
 
        /*
         * Performs checks to make sure data is as we expect it to be.
@@ -296,7 +296,7 @@ dns_dlzregister(const char *drivername, const dns_dlzmethods_t *methods,
         * initialize the dlz_implementations list, this is guaranteed
         * to only really happen once.
         */
-       RUNTIME_CHECK(isc_once_do(&once, dlz_initialize) == ISC_R_SUCCESS);
+       isc_once_do(&once, dlz_initialize);
 
        /* lock the dlz_implementations list so we can modify it. */
        RWLOCK(&dlz_implock, isc_rwlocktype_write);
@@ -377,7 +377,7 @@ dns_dlzunregister(dns_dlzimplementation_t **dlzimp) {
         * initialize the dlz_implementations list, this is guaranteed
         * to only really happen once.
         */
-       RUNTIME_CHECK(isc_once_do(&once, dlz_initialize) == ISC_R_SUCCESS);
+       isc_once_do(&once, dlz_initialize);
 
        dlz_imp = *dlzimp;
 
index 72769bc7cd81720ccf5503b72fe5083898558ebd..63d0a4a95bac7c49cae2d49b7dcfb11577926e35 100644 (file)
@@ -212,7 +212,7 @@ dns_dyndb_load(const char *libname, const char *name, const char *parameters,
        REQUIRE(DNS_DYNDBCTX_VALID(dctx));
        REQUIRE(name != NULL);
 
-       RUNTIME_CHECK(isc_once_do(&once, dyndb_initialize) == ISC_R_SUCCESS);
+       isc_once_do(&once, dyndb_initialize);
 
        LOCK(&dyndb_lock);
 
@@ -244,7 +244,7 @@ dns_dyndb_cleanup(bool exiting) {
        dyndb_implementation_t *elem;
        dyndb_implementation_t *prev;
 
-       RUNTIME_CHECK(isc_once_do(&once, dyndb_initialize) == ISC_R_SUCCESS);
+       isc_once_do(&once, dyndb_initialize);
 
        LOCK(&dyndb_lock);
        elem = TAIL(dyndb_implementations);
index 3c31b4a02de3884b7bfd626bfb9207bdd33881c3..88a46e2c878e7e3d15c8b2fb8d66b91b8bceaa66 100644 (file)
@@ -82,7 +82,7 @@ fromtext_in_wks(ARGS_FROMTEXT) {
        UNUSED(rdclass);
        UNUSED(callbacks);
 
-       RUNTIME_CHECK(isc_once_do(&once, init_lock) == ISC_R_SUCCESS);
+       isc_once_do(&once, init_lock);
 
        /*
         * IPv4 dotted quad.
index f2708e6bb5599bc00de30ce573e5057db29f5582..1a28a216a70f2108c5749f95a2e704ac094ce5af 100644 (file)
@@ -52,9 +52,7 @@ isc_hash_initialize(void) {
 const void *
 isc_hash_get_initializer(void) {
        if (!hash_initialized) {
-               RUNTIME_CHECK(
-                       isc_once_do(&isc_hash_once, isc_hash_initialize) ==
-                       ISC_R_SUCCESS);
+               isc_once_do(&isc_hash_once, isc_hash_initialize);
        }
 
        return (isc_hash_key);
@@ -69,9 +67,7 @@ isc_hash_set_initializer(const void *initializer) {
         * isc_hash_set_initializer() is called.
         */
        if (!hash_initialized) {
-               RUNTIME_CHECK(
-                       isc_once_do(&isc_hash_once, isc_hash_initialize) ==
-                       ISC_R_SUCCESS);
+               isc_once_do(&isc_hash_once, isc_hash_initialize);
        }
 
        memmove(isc_hash_key, initializer, sizeof(isc_hash_key));
@@ -83,8 +79,7 @@ isc_hash64(const void *data, const size_t length, const bool case_sensitive) {
 
        REQUIRE(length == 0 || data != NULL);
 
-       RUNTIME_CHECK(isc_once_do(&isc_hash_once, isc_hash_initialize) ==
-                     ISC_R_SUCCESS);
+       isc_once_do(&isc_hash_once, isc_hash_initialize);
 
        isc_siphash24(isc_hash_key, data, length, case_sensitive,
                      (uint8_t *)&hval);
@@ -98,8 +93,7 @@ isc_hash32(const void *data, const size_t length, const bool case_sensitive) {
 
        REQUIRE(length == 0 || data != NULL);
 
-       RUNTIME_CHECK(isc_once_do(&isc_hash_once, isc_hash_initialize) ==
-                     ISC_R_SUCCESS);
+       isc_once_do(&isc_hash_once, isc_hash_initialize);
 
        isc_halfsiphash24(isc_hash_key, data, length, case_sensitive,
                          (uint8_t *)&hval);
index 7d341ca63c9adb137d5c0dbe5a847c2fd687c202..4771b5cb5eaf5573e80e7ada940be59e0710fe01 100644 (file)
@@ -23,7 +23,8 @@ typedef pthread_once_t isc_once_t;
 
 #define ISC_ONCE_INIT PTHREAD_ONCE_INIT
 
-/* XXX We could do fancier error handling... */
-
-#define isc_once_do(op, f) \
-       ((pthread_once((op), (f)) == 0) ? ISC_R_SUCCESS : ISC_R_UNEXPECTED)
+#define isc_once_do(op, f)                                  \
+       {                                                   \
+               int _ret = pthread_once((op), (f));         \
+               PTHREADS_RUNTIME_CHECK(pthread_once, _ret); \
+       }
index 50da4c2832c7f3ac37ff6bb424df3e17eed59649..39ce4cec1775ce1a15df937947a645f81e06597d 100644 (file)
@@ -451,7 +451,7 @@ mem_initialize(void) {
 
 void
 isc__mem_initialize(void) {
-       RUNTIME_CHECK(isc_once_do(&init_once, mem_initialize) == ISC_R_SUCCESS);
+       isc_once_do(&init_once, mem_initialize);
 }
 
 static void
@@ -463,7 +463,7 @@ mem_shutdown(void) {
 
 void
 isc__mem_shutdown(void) {
-       RUNTIME_CHECK(isc_once_do(&shut_once, mem_shutdown) == ISC_R_SUCCESS);
+       isc_once_do(&shut_once, mem_shutdown);
 }
 
 static void
index 9c067cbd9ece90995b062cb1ed6a5f730ec3241a..c0bc2dc2e0035bb690a1346b08ec00560031a775 100644 (file)
@@ -43,8 +43,7 @@ mutex_initialize(void) {
 
 void
 isc__mutex_initialize(void) {
-       RUNTIME_CHECK(isc_once_do(&init_once, mutex_initialize) ==
-                     ISC_R_SUCCESS);
+       isc_once_do(&init_once, mutex_initialize);
 }
 
 void
index efb9ff1ccf5f8813d68f111ab2fa94fbb5526361..be75fb480bd8aed585b2862b0434d30e4783e863 100644 (file)
@@ -198,7 +198,7 @@ initialize_action(void) {
 
 static void
 initialize(void) {
-       RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS);
+       isc_once_do(&once, initialize_action);
 }
 
 isc_result_t
@@ -281,8 +281,7 @@ close:
 
 static void
 initialize_ipv6only(void) {
-       RUNTIME_CHECK(isc_once_do(&once_ipv6only, try_ipv6only) ==
-                     ISC_R_SUCCESS);
+       isc_once_do(&once_ipv6only, try_ipv6only);
 }
 
 #ifdef __notyet__
@@ -329,8 +328,7 @@ close:
 
 static void
 initialize_ipv6pktinfo(void) {
-       RUNTIME_CHECK(isc_once_do(&once_ipv6pktinfo, try_ipv6pktinfo) ==
-                     ISC_R_SUCCESS);
+       isc_once_do(&once_ipv6pktinfo, try_ipv6pktinfo);
 }
 #endif /* ifdef __notyet__ */
 
@@ -696,7 +694,7 @@ try_dscp(void) {
 
 static void
 initialize_dscp(void) {
-       RUNTIME_CHECK(isc_once_do(&once_dscp, try_dscp) == ISC_R_SUCCESS);
+       isc_once_do(&once_dscp, try_dscp);
 }
 
 unsigned int