Reduce "thread.arena" mallctl contention.
This resolves #460.
diff --git a/src/ctl.c b/src/ctl.c
index 535f1ea..87fd8c7 100644
--- a/src/ctl.c
+++ b/src/ctl.c
@@ -1186,14 +1186,13 @@
if (oldarena == NULL)
return (EAGAIN);
- malloc_mutex_lock(tsd_tsdn(tsd), &ctl_mtx);
newind = oldind = oldarena->ind;
WRITE(newind, unsigned);
READ(oldind, unsigned);
if (newind != oldind) {
arena_t *newarena;
- if (newind >= ctl_stats.narenas) {
+ if (newind >= narenas_total_get()) {
/* New arena index is out of range. */
ret = EFAULT;
goto label_return;
@@ -1218,7 +1217,6 @@
ret = 0;
label_return:
- malloc_mutex_unlock(tsd_tsdn(tsd), &ctl_mtx);
return (ret);
}