summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMadelyn Olson <34459052+madolson@users.noreply.github.com>2021-04-19 22:16:27 -0700
committerGitHub <noreply@github.com>2021-04-19 22:16:27 -0700
commitc73b4ddfd96d00ed0d0fde17953ce63d78bc3777 (patch)
tree2de45f1e248ff881a03440e6b870fa173d2d2fa3 /src
parentc2aff4c74493b921b1ad6868902ba68d647cc1c8 (diff)
downloadredis-c73b4ddfd96d00ed0d0fde17953ce63d78bc3777.tar.gz
Fix memory leak when doing lazyfreeing client tracking table (#8822)
Interior rax pointers were not being freed
Diffstat (limited to 'src')
-rw-r--r--src/lazyfree.c5
-rw-r--r--src/server.h1
2 files changed, 3 insertions, 3 deletions
diff --git a/src/lazyfree.c b/src/lazyfree.c
index f18b2027f..a2cf2c3ed 100644
--- a/src/lazyfree.c
+++ b/src/lazyfree.c
@@ -39,12 +39,11 @@ void lazyfreeFreeSlotsMap(void *args[]) {
atomicIncr(lazyfreed_objects,len);
}
-/* Release the rax mapping Redis Cluster keys to slots in the
- * lazyfree thread. */
+/* Release the key tracking table. */
void lazyFreeTrackingTable(void *args[]) {
rax *rt = args[0];
size_t len = rt->numele;
- raxFree(rt);
+ freeTrackingRadixTree(rt);
atomicDecr(lazyfree_objects,len);
atomicIncr(lazyfreed_objects,len);
}
diff --git a/src/server.h b/src/server.h
index d35eaa425..a2a722c6d 100644
--- a/src/server.h
+++ b/src/server.h
@@ -1911,6 +1911,7 @@ void disableTracking(client *c);
void trackingRememberKeys(client *c);
void trackingInvalidateKey(client *c, robj *keyobj);
void trackingInvalidateKeysOnFlush(int async);
+void freeTrackingRadixTree(rax *rt);
void freeTrackingRadixTreeAsync(rax *rt);
void trackingLimitUsedSlots(void);
uint64_t trackingGetTotalItems(void);