diff options
Diffstat (limited to 'src/lazyfree.c')
-rw-r--r-- | src/lazyfree.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/lazyfree.c b/src/lazyfree.c index 10f1ab39f..6127abe77 100644 --- a/src/lazyfree.c +++ b/src/lazyfree.c @@ -46,6 +46,18 @@ void lazyFreeLuaScripts(void *args[]) { atomicIncr(lazyfreed_objects,len); } +/* Release replication backlog referencing memory. */ +void lazyFreeReplicationBacklogRefMem(void *args[]) { + list *blocks = args[0]; + rax *index = args[1]; + long long len = listLength(blocks); + len += raxSize(index); + listRelease(blocks); + raxFree(index); + atomicDecr(lazyfree_objects,len); + atomicIncr(lazyfreed_objects,len); +} + /* Return the number of currently pending objects to free. */ size_t lazyfreeGetPendingObjectsCount(void) { size_t aux; @@ -180,3 +192,16 @@ void freeLuaScriptsAsync(dict *lua_scripts) { dictRelease(lua_scripts); } } + +/* Free replication backlog referencing buffer blocks and rax index. */ +void freeReplicationBacklogRefMemAsync(list *blocks, rax *index) { + if (listLength(blocks) > LAZYFREE_THRESHOLD || + raxSize(index) > LAZYFREE_THRESHOLD) + { + atomicIncr(lazyfree_objects,listLength(blocks)+raxSize(index)); + bioCreateLazyFreeJob(lazyFreeReplicationBacklogRefMem,2,blocks,index); + } else { + listRelease(blocks); + raxFree(index); + } +} |