summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordormando <dormando@rydia.net>2011-10-03 04:24:00 -0700
committerdormando <dormando@rydia.net>2011-10-05 00:34:18 -0700
commit90ce9e28ca71c20fafd95dcb5523f9fda526431d (patch)
treeb8bc1b59e8cac3435f673613ef52409700f75f80
parent8af75043cfc1b3a1e997cb4311538ac744a3cc0b (diff)
downloadmemcached-90ce9e28ca71c20fafd95dcb5523f9fda526431d.tar.gz
push cache_lock deeper into item_alloc1.4.9-beta1
easy win without restructuring item_alloc more: push the lock down after it's done fiddling with snprintf.
-rw-r--r--items.c4
-rw-r--r--thread.c3
2 files changed, 5 insertions, 2 deletions
diff --git a/items.c b/items.c
index ea8852c..ebd2cb5 100644
--- a/items.c
+++ b/items.c
@@ -98,6 +98,7 @@ item *do_item_alloc(char *key, const size_t nkey, const int flags, const rel_tim
if (id == 0)
return 0;
+ mutex_lock(&cache_lock);
/* do a quick check if we have any expired items in the tail.. */
item *search;
rel_time_t oldest_live = settings.oldest_live;
@@ -133,6 +134,7 @@ item *do_item_alloc(char *key, const size_t nkey, const int flags, const rel_tim
(search->exptime == 0 || search->exptime > current_time)) {
if (settings.evict_to_free == 0) {
itemstats[id].outofmemory++;
+ pthread_mutex_unlock(&cache_lock);
return NULL;
}
itemstats[id].evicted++;
@@ -174,6 +176,7 @@ item *do_item_alloc(char *key, const size_t nkey, const int flags, const rel_tim
search->refcount = 0;
do_item_unlink_nolock(search, hash(ITEM_key(search), search->nkey, 0));
}
+ pthread_mutex_unlock(&cache_lock);
return NULL;
}
@@ -193,6 +196,7 @@ item *do_item_alloc(char *key, const size_t nkey, const int flags, const rel_tim
it->exptime = exptime;
memcpy(ITEM_suffix(it), suffix, (size_t)nsuffix);
it->nsuffix = nsuffix;
+ pthread_mutex_unlock(&cache_lock);
return it;
}
diff --git a/thread.c b/thread.c
index c201c5d..cce176b 100644
--- a/thread.c
+++ b/thread.c
@@ -340,9 +340,8 @@ int is_listen_thread() {
*/
item *item_alloc(char *key, size_t nkey, int flags, rel_time_t exptime, int nbytes) {
item *it;
- mutex_lock(&cache_lock);
+ /* do_item_alloc handles its own locks */
it = do_item_alloc(key, nkey, flags, exptime, nbytes);
- pthread_mutex_unlock(&cache_lock);
return it;
}