#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 {
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,
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);
}
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);
initialize();
- LOCK(&lock);
+ RWLOCK(&lock, isc_rwlocktype_read);
text = NULL;
for (table = ISC_LIST_HEAD(*tables);
text = "(result code text not available)";
}
- UNLOCK(&lock);
+ RWUNLOCK(&lock, isc_rwlocktype_read);
return (text);
}