summaryrefslogtreecommitdiff
path: root/src/lazyfree.c
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2015-09-25 16:22:25 +0200
committerantirez <antirez@gmail.com>2015-10-01 13:02:25 +0200
commitb08c36c5f2e635a128f2a306b6f38a0159ed56e6 (patch)
treed85aac24eda28dde48dc60d2399c0dc083fc5d30 /src/lazyfree.c
parentc7b46a471996e45a464a2b52d6cdc81487f19a05 (diff)
downloadredis-b08c36c5f2e635a128f2a306b6f38a0159ed56e6.tar.gz
Lazyfree: keep count of objects to free.
Diffstat (limited to 'src/lazyfree.c')
-rw-r--r--src/lazyfree.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/lazyfree.c b/src/lazyfree.c
index aae11d8ab..f94edfd0a 100644
--- a/src/lazyfree.c
+++ b/src/lazyfree.c
@@ -1,10 +1,9 @@
#include "server.h"
#include "bio.h"
+#include "atomicvar.h"
static size_t lazyfree_objects = 0;
-static size_t lazyfree_dbs = 0;
pthread_mutex_t lazyfree_objects_mutex = PTHREAD_MUTEX_INITIALIZER;
-pthread_mutex_t lazyfree_objects_dbs = PTHREAD_MUTEX_INITIALIZER;
/* Return the amount of work needed in order to free an object.
* The return value is not always the actual number of allocations the
@@ -60,6 +59,7 @@ int dbAsyncDelete(redisDb *db, robj *key) {
/* If releasing the object is too much work, let's put it into the
* lazy free list. */
if (free_effort > LAZYFREE_THRESHOLD) {
+ atomicIncr(lazyfree_objects,1,&lazyfree_objects_mutex);
bioCreateBackgroundJob(BIO_LAZY_FREE,val,NULL,NULL);
dictSetVal(db->dict,de,NULL);
}
@@ -74,3 +74,10 @@ int dbAsyncDelete(redisDb *db, robj *key) {
return 0;
}
}
+
+/* Implementation of function to release a single object called from the
+ * lazyfree thread from bio.c. */
+void lazyfreeFreeObjectFromBioThread(robj *o) {
+ decrRefCount(o);
+ atomicDecr(lazyfree_objects,1,&lazyfree_objects_mutex);
+}