summaryrefslogtreecommitdiff
path: root/src/lazyfree.c
diff options
context:
space:
mode:
authorOran Agra <oran@redislabs.com>2021-02-01 20:11:42 +0200
committerGitHub <noreply@github.com>2021-02-01 20:11:42 +0200
commit2dba1e391d3772a8da182d95bde050ffa9d01e4d (patch)
tree3664bcd3ede605643a18668624f41c846b5e43ab /src/lazyfree.c
parentec2d180739aa3877a45ec54438c68a7659be5159 (diff)
parent95338f9cc41fdfd050f122789187db75fda1fe3c (diff)
downloadredis-6.2-rc3.tar.gz
Merge 6.2 RC36.2-rc3
Diffstat (limited to 'src/lazyfree.c')
-rw-r--r--src/lazyfree.c18
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);
+ }
+}