2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-30 14:07:59 +00:00

1944. [cleanup] isc_hash_create() does not need a read/write lock.

[RT #15522]
This commit is contained in:
Mark Andrews
2006-01-03 05:51:15 +00:00
parent 01db0feafa
commit be2c2c29a8
2 changed files with 8 additions and 6 deletions

View File

@@ -1,3 +1,6 @@
1944. [cleanup] isc_hash_create() does not need a read/write lock.
[RT #15522]
1943. [bug] Set the loadtime after rolling forward the journal. 1943. [bug] Set the loadtime after rolling forward the journal.
[RT #15647] [RT #15647]

View File

@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE. * PERFORMANCE OF THIS SOFTWARE.
*/ */
/* $Id: hash.c,v 1.9 2005/07/12 01:00:17 marka Exp $ */ /* $Id: hash.c,v 1.10 2006/01/03 05:51:15 marka Exp $ */
/*! \file /*! \file
* Some portion of this code was derived from universal hash function * Some portion of this code was derived from universal hash function
@@ -66,7 +66,6 @@ if advised of the possibility of such damage.
#include <isc/once.h> #include <isc/once.h>
#include <isc/random.h> #include <isc/random.h>
#include <isc/refcount.h> #include <isc/refcount.h>
#include <isc/rwlock.h>
#include <isc/string.h> #include <isc/string.h>
#include <isc/util.h> #include <isc/util.h>
@@ -100,7 +99,7 @@ struct isc_hash {
hash_random_t *rndvector; /*%< random vector for universal hashing */ hash_random_t *rndvector; /*%< random vector for universal hashing */
}; };
static isc_rwlock_t createlock; static isc_mutex_t createlock;
static isc_once_t once = ISC_ONCE_INIT; static isc_once_t once = ISC_ONCE_INIT;
static isc_hash_t *hash = NULL; static isc_hash_t *hash = NULL;
@@ -213,7 +212,7 @@ isc_hash_ctxcreate(isc_mem_t *mctx, isc_entropy_t *entropy,
static void static void
initialize_lock(void) { initialize_lock(void) {
RUNTIME_CHECK(isc_rwlock_init(&createlock, 0, 0) == ISC_R_SUCCESS); RUNTIME_CHECK(isc_mutex_init(&createlock) == ISC_R_SUCCESS);
} }
isc_result_t isc_result_t
@@ -225,12 +224,12 @@ isc_hash_create(isc_mem_t *mctx, isc_entropy_t *entropy, size_t limit) {
RUNTIME_CHECK(isc_once_do(&once, initialize_lock) == ISC_R_SUCCESS); RUNTIME_CHECK(isc_once_do(&once, initialize_lock) == ISC_R_SUCCESS);
RWLOCK(&createlock, isc_rwlocktype_write); LOCK(&createlock);
if (hash == NULL) if (hash == NULL)
result = isc_hash_ctxcreate(mctx, entropy, limit, &hash); result = isc_hash_ctxcreate(mctx, entropy, limit, &hash);
RWUNLOCK(&createlock, isc_rwlocktype_write); UNLOCK(&createlock);
return (result); return (result);
} }