]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use isc_rwlock for isc_result tables
authorWitold Kręcicki <wpk@isc.org>
Tue, 28 Jan 2020 10:27:27 +0000 (11:27 +0100)
committerWitold Kręcicki <wpk@isc.org>
Fri, 7 Feb 2020 09:43:06 +0000 (10:43 +0100)
lib/isc/result.c

index ff3ca024138f7cd1b24fd6751a543406ebe6e61c..736be4cc8d24d30e3ff63953c61583f49a02294b 100644 (file)
@@ -15,9 +15,9 @@
 #include <stdlib.h>
 
 #include <isc/lib.h>
-#include <isc/mutex.h>
 #include <isc/once.h>
 #include <isc/resultclass.h>
+#include <isc/rwlock.h>
 #include <isc/util.h>
 
 typedef struct resulttable {
@@ -182,7 +182,7 @@ static const char *identifier[ISC_R_NRESULTS] = {
 static isc_once_t              once = ISC_ONCE_INIT;
 static resulttable_list_t      description_tables;
 static resulttable_list_t      identifier_tables;
-static isc_mutex_t             lock;
+static isc_rwlock_t            lock;
 
 static isc_result_t
 register_table(resulttable_list_t *tables, unsigned int base,
@@ -208,11 +208,11 @@ register_table(resulttable_list_t *tables, unsigned int base,
        table->set = set;
        ISC_LINK_INIT(table, link);
 
-       LOCK(&lock);
+       RWLOCK(&lock, isc_rwlocktype_write);
 
        ISC_LIST_APPEND(*tables, table, link);
 
-       UNLOCK(&lock);
+       RWUNLOCK(&lock, isc_rwlocktype_write);
 
        return (ISC_R_SUCCESS);
 }
@@ -221,7 +221,7 @@ static void
 initialize_action(void) {
        isc_result_t result;
 
-       isc_mutex_init(&lock);
+       isc_rwlock_init(&lock, 0, 0);
        ISC_LIST_INIT(description_tables);
        ISC_LIST_INIT(identifier_tables);
 
@@ -257,7 +257,7 @@ isc_result_tomany_helper(resulttable_list_t *tables, isc_result_t result) {
 
        initialize();
 
-       LOCK(&lock);
+       RWLOCK(&lock, isc_rwlocktype_read);
 
        text = NULL;
        for (table = ISC_LIST_HEAD(*tables);
@@ -273,7 +273,7 @@ isc_result_tomany_helper(resulttable_list_t *tables, isc_result_t result) {
                text = "(result code text not available)";
        }
 
-       UNLOCK(&lock);
+       RWUNLOCK(&lock, isc_rwlocktype_read);
 
        return (text);
 }