diff --git a/src/defrag.c b/src/defrag.c index a819eb8ac..d3f4ceee6 100644 --- a/src/defrag.c +++ b/src/defrag.c @@ -729,8 +729,9 @@ void defragStream(redisDb *db, dictEntry *kde) { void defragModule(redisDb *db, dictEntry *kde) { robj *obj = dictGetVal(kde); serverAssert(obj->type == OBJ_MODULE); - - if (!moduleDefragValue(dictGetKey(kde), obj, db->id)) + robj keyobj; + initStaticStringObject(keyobj, dictGetKey(kde)); + if (!moduleDefragValue(&keyobj, obj, db->id)) defragLater(db, kde); } @@ -940,7 +941,9 @@ int defragLaterItem(dictEntry *de, unsigned long *cursor, long long endtime, int } else if (ob->type == OBJ_STREAM) { return scanLaterStreamListpacks(ob, cursor, endtime); } else if (ob->type == OBJ_MODULE) { - return moduleLateDefrag(dictGetKey(de), ob, cursor, endtime, dbid); + robj keyobj; + initStaticStringObject(keyobj, dictGetKey(de)); + return moduleLateDefrag(&keyobj, ob, cursor, endtime, dbid); } else { *cursor = 0; /* object type may have changed since we schedule it for later */ } diff --git a/tests/modules/defragtest.c b/tests/modules/defragtest.c index a27b57e13..597b5aa79 100644 --- a/tests/modules/defragtest.c +++ b/tests/modules/defragtest.c @@ -161,13 +161,14 @@ size_t FragFreeEffort(RedisModuleString *key, const void *value) { } int FragDefrag(RedisModuleDefragCtx *ctx, RedisModuleString *key, void **value) { - REDISMODULE_NOT_USED(key); unsigned long i = 0; int steps = 0; int dbid = RedisModule_GetDbIdFromDefragCtx(ctx); RedisModule_Assert(dbid != -1); + RedisModule_Log(NULL, "notice", "Defrag key: %s", RedisModule_StringPtrLen(key, NULL)); + /* Attempt to get cursor, validate it's what we're exepcting */ if (RedisModule_DefragCursorGet(ctx, &i) == REDISMODULE_OK) { if (i > 0) datatype_resumes++;