diff --git a/src/module.cpp b/src/module.cpp index 82b52bafa..52439cd2a 100644 --- a/src/module.cpp +++ b/src/module.cpp @@ -690,8 +690,9 @@ void moduleHandlePropagationAfterCommandCallback(RedisModuleCtx *ctx) { } /* Free the context after the user function was called. */ -void moduleFreeContext(RedisModuleCtx *ctx) { - moduleHandlePropagationAfterCommandCallback(ctx); +void moduleFreeContext(RedisModuleCtx *ctx, bool propogate) { + if (propogate) + moduleHandlePropagationAfterCommandCallback(ctx); autoMemoryCollect(ctx); poolAllocRelease(ctx); if (ctx->postponed_arrays) { diff --git a/src/rdb.cpp b/src/rdb.cpp index 5c3c77174..997ef67f3 100644 --- a/src/rdb.cpp +++ b/src/rdb.cpp @@ -2542,7 +2542,7 @@ robj *rdbLoadObject(int rdbtype, rio *rdb, sds key, int *error, uint64_t mvcc_ts * encoding version in the lower 10 bits of the module ID. */ void *ptr = mt->rdb_load(&io,moduleid&1023); if (io.ctx) { - moduleFreeContext(io.ctx); + moduleFreeContext(io.ctx, false /* propogate */); zfree(io.ctx); } diff --git a/src/server.h b/src/server.h index a77b3aa87..9700bf141 100644 --- a/src/server.h +++ b/src/server.h @@ -2918,7 +2918,7 @@ int moduleGetCommandKeysViaAPI(struct redisCommand *cmd, robj **argv, int argc, moduleType *moduleTypeLookupModuleByID(uint64_t id); void moduleTypeNameByID(char *name, uint64_t moduleid); const char *moduleTypeModuleName(moduleType *mt); -void moduleFreeContext(struct RedisModuleCtx *ctx); +void moduleFreeContext(struct RedisModuleCtx *ctx, bool propogate = true); void unblockClientFromModule(client *c); void moduleHandleBlockedClients(int iel); void moduleBlockedClientTimedOut(client *c);