From de1b19ea886db8db1a28f7b988a0f7130bf81619 Mon Sep 17 00:00:00 2001 From: Oran Agra Date: Sun, 4 Jul 2021 14:21:53 +0300 Subject: [PATCH] fix valgrind issues with recently added test in modules/blockonbackground (#9192) fixes test issue introduced in #9167 1. invalid reads due to accessing non-retained string (passed as unblock context). 2. leaking module blocked client context, see #6922 for info. (cherry picked from commit a8518cce951629eaccde40fd0e51b36a5dc6321c) --- tests/modules/blockonbackground.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/modules/blockonbackground.c b/tests/modules/blockonbackground.c index bc6845a8..68875630 100644 --- a/tests/modules/blockonbackground.c +++ b/tests/modules/blockonbackground.c @@ -206,6 +206,7 @@ int Block_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) RedisModuleString *r = RedisModule_GetBlockedClientPrivateData(ctx); return RedisModule_ReplyWithString(ctx, r); } else if (RedisModule_IsBlockedTimeoutRequest(ctx)) { + RedisModule_UnblockClient(blocked_client, NULL); /* Must be called to avoid leaks. */ blocked_client = NULL; return RedisModule_ReplyWithSimpleString(ctx, "Timed out"); } @@ -245,7 +246,9 @@ int Release_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc return RedisModule_ReplyWithError(ctx, "ERR No blocked client"); } - RedisModule_UnblockClient(blocked_client, argv[1]); + RedisModuleString *replystr = argv[1]; + RedisModule_RetainString(ctx, replystr); + int err = RedisModule_UnblockClient(blocked_client, replystr); blocked_client = NULL; RedisModule_ReplyWithSimpleString(ctx, "OK");