From 1376d83363cf0e9c9f872762854518b16d8cedef Mon Sep 17 00:00:00 2001 From: sundb Date: Tue, 14 Sep 2021 20:14:09 +0800 Subject: [PATCH] Fix memory leak due to missing freeCallback in blockonbackground moduleapi test (#9499) Before #9497, before redis-server was shut down, we did not manually shut down all the clients, which would have prevented valgrind from detecting a memory leak in the client's argc. --- tests/modules/blockonbackground.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/modules/blockonbackground.c b/tests/modules/blockonbackground.c index 92f5876d2..ced77862d 100644 --- a/tests/modules/blockonbackground.c +++ b/tests/modules/blockonbackground.c @@ -31,6 +31,11 @@ void HelloBlock_FreeData(RedisModuleCtx *ctx, void *privdata) { RedisModule_Free(privdata); } +/* Private data freeing callback for BLOCK.BLOCK command. */ +void HelloBlock_FreeStringData(RedisModuleCtx *ctx, void *privdata) { + RedisModule_FreeString(ctx, (RedisModuleString*)privdata); +} + /* The thread entry point that actually executes the blocking part * of the command BLOCK.DEBUG. */ void *BlockDebug_ThreadMain(void *arg) { @@ -225,7 +230,7 @@ int Block_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) * callback and differentiate the different code flows above. */ blocked_client = RedisModule_BlockClient(ctx, Block_RedisCommand, - timeout > 0 ? Block_RedisCommand : NULL, NULL, timeout); + timeout > 0 ? Block_RedisCommand : NULL, HelloBlock_FreeStringData, timeout); return REDISMODULE_OK; }