diff options
author | Oran Agra <oran@redislabs.com> | 2021-02-01 20:11:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-01 20:11:42 +0200 |
commit | 2dba1e391d3772a8da182d95bde050ffa9d01e4d (patch) | |
tree | 3664bcd3ede605643a18668624f41c846b5e43ab /src/lazyfree.c | |
parent | ec2d180739aa3877a45ec54438c68a7659be5159 (diff) | |
parent | 95338f9cc41fdfd050f122789187db75fda1fe3c (diff) | |
download | redis-6.2-rc3.tar.gz |
Merge 6.2 RC36.2-rc3
Diffstat (limited to 'src/lazyfree.c')
-rw-r--r-- | src/lazyfree.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/lazyfree.c b/src/lazyfree.c index 8b9f0e2dc..f18b2027f 100644 --- a/src/lazyfree.c +++ b/src/lazyfree.c @@ -49,6 +49,14 @@ void lazyFreeTrackingTable(void *args[]) { atomicIncr(lazyfreed_objects,len); } +void lazyFreeLuaScripts(void *args[]) { + dict *lua_scripts = args[0]; + long long len = dictSize(lua_scripts); + dictRelease(lua_scripts); + atomicDecr(lazyfree_objects,len); + atomicIncr(lazyfreed_objects,len); +} + /* Return the number of currently pending objects to free. */ size_t lazyfreeGetPendingObjectsCount(void) { size_t aux; @@ -212,3 +220,13 @@ void freeTrackingRadixTreeAsync(rax *tracking) { atomicIncr(lazyfree_objects,tracking->numele); bioCreateLazyFreeJob(lazyFreeTrackingTable,1,tracking); } + +/* Free lua_scripts dict, if the dict is huge enough, free it in async way. */ +void freeLuaScriptsAsync(dict *lua_scripts) { + if (dictSize(lua_scripts) > LAZYFREE_THRESHOLD) { + atomicIncr(lazyfree_objects,dictSize(lua_scripts)); + bioCreateLazyFreeJob(lazyFreeLuaScripts,1,lua_scripts); + } else { + dictRelease(lua_scripts); + } +} |