mirror of
https://github.com/fluencelabs/redis
synced 2025-03-17 16:10:50 +00:00
Lazyfree: keep count of objects to free.
This commit is contained in:
parent
c7b46a4719
commit
b08c36c5f2
@ -84,6 +84,7 @@ struct bio_job {
|
||||
};
|
||||
|
||||
void *bioProcessBackgroundJobs(void *arg);
|
||||
void lazyfreeFreeObjectFromBioThread(robj *o);
|
||||
|
||||
/* Make sure we have enough stack to perform all the things we do in the
|
||||
* main thread. */
|
||||
@ -186,7 +187,7 @@ void *bioProcessBackgroundJobs(void *arg) {
|
||||
} else if (type == BIO_AOF_FSYNC) {
|
||||
aof_fsync((long)job->arg1);
|
||||
} else if (type == BIO_LAZY_FREE) {
|
||||
decrRefCount((robj*)job->arg1);
|
||||
lazyfreeFreeObjectFromBioThread(job->arg1);
|
||||
} else {
|
||||
serverPanic("Wrong job type in bioProcessBackgroundJobs().");
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user