diff options
author | antirez <antirez@gmail.com> | 2015-09-25 16:22:25 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2015-10-01 13:02:25 +0200 |
commit | b08c36c5f2e635a128f2a306b6f38a0159ed56e6 (patch) | |
tree | d85aac24eda28dde48dc60d2399c0dc083fc5d30 /src/lazyfree.c | |
parent | c7b46a471996e45a464a2b52d6cdc81487f19a05 (diff) | |
download | redis-b08c36c5f2e635a128f2a306b6f38a0159ed56e6.tar.gz |
Lazyfree: keep count of objects to free.
Diffstat (limited to 'src/lazyfree.c')
-rw-r--r-- | src/lazyfree.c | 11 |
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); +} |