diff options
author | peter <peter@FreeBSD.org> | 2013-07-03 18:35:21 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2013-07-03 18:35:21 +0000 |
commit | 300dfeb2c43c7b0b21cb57726128b43c970eb78d (patch) | |
tree | f1e6c66ef88c635fd69918eafab29a785ec064de /lib/libc/iconv/citrus_iconv.c | |
parent | 7adacbf288227833dfa598d5617e97cab8742816 (diff) | |
download | FreeBSD-src-300dfeb2c43c7b0b21cb57726128b43c970eb78d.zip FreeBSD-src-300dfeb2c43c7b0b21cb57726128b43c970eb78d.tar.gz |
Make it clear that there are three separate internal locks.
Diffstat (limited to 'lib/libc/iconv/citrus_iconv.c')
-rw-r--r-- | lib/libc/iconv/citrus_iconv.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/libc/iconv/citrus_iconv.c b/lib/libc/iconv/citrus_iconv.c index 04acccf..31cf7df 100644 --- a/lib/libc/iconv/citrus_iconv.c +++ b/lib/libc/iconv/citrus_iconv.c @@ -68,11 +68,13 @@ static int shared_max_reuse, shared_num_unused; static _CITRUS_HASH_HEAD(, _citrus_iconv_shared, CI_HASH_SIZE) shared_pool; static TAILQ_HEAD(, _citrus_iconv_shared) shared_unused; +static pthread_rwlock_t ci_lock = PTHREAD_RWLOCK_INITIALIZER; + static __inline void init_cache(void) { - WLOCK; + WLOCK(&ci_lock); if (!isinit) { _CITRUS_HASH_INIT(&shared_pool, CI_HASH_SIZE); TAILQ_INIT(&shared_unused); @@ -83,7 +85,7 @@ init_cache(void) shared_max_reuse = CI_INITIAL_MAX_REUSE; isinit = true; } - UNLOCK; + UNLOCK(&ci_lock); } static __inline void @@ -195,7 +197,7 @@ get_shared(struct _citrus_iconv_shared * __restrict * __restrict rci, snprintf(convname, sizeof(convname), "%s/%s", src, dst); - WLOCK; + WLOCK(&ci_lock); /* lookup alread existing entry */ hashval = hash_func(convname); @@ -222,7 +224,7 @@ get_shared(struct _citrus_iconv_shared * __restrict * __restrict rci, *rci = ci; quit: - UNLOCK; + UNLOCK(&ci_lock); return (ret); } @@ -231,7 +233,7 @@ static void release_shared(struct _citrus_iconv_shared * __restrict ci) { - WLOCK; + WLOCK(&ci_lock); ci->ci_used_count--; if (ci->ci_used_count == 0) { /* put it into unused list */ @@ -247,7 +249,7 @@ release_shared(struct _citrus_iconv_shared * __restrict ci) } } - UNLOCK; + UNLOCK(&ci_lock); } /* |