summaryrefslogtreecommitdiffstats
path: root/lib/libc/iconv/citrus_iconv.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2013-07-03 18:35:21 +0000
committerpeter <peter@FreeBSD.org>2013-07-03 18:35:21 +0000
commit300dfeb2c43c7b0b21cb57726128b43c970eb78d (patch)
treef1e6c66ef88c635fd69918eafab29a785ec064de /lib/libc/iconv/citrus_iconv.c
parent7adacbf288227833dfa598d5617e97cab8742816 (diff)
downloadFreeBSD-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.c14
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);
}
/*
OpenPOWER on IntegriCloud