From cbae1d34f6f188921639a746dc308130bbf2aa04 Mon Sep 17 00:00:00 2001 From: antirez Date: Thu, 20 May 2010 16:50:40 +0200 Subject: [PATCH] Fix for DEBUG DIGEST --- redis.c | 20 ++++++++++++-------- staticsymbols.h | 4 ++++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/redis.c b/redis.c index d6c6cbdf2..f2fbbdd53 100644 --- a/redis.c +++ b/redis.c @@ -27,7 +27,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#define REDIS_VERSION "1.3.12" +#define REDIS_VERSION "1.3.13" #include "fmacros.h" #include "config.h" @@ -10432,18 +10432,23 @@ static void computeDatasetDigest(unsigned char *final) { /* Iterate this DB writing every entry */ while((de = dictNext(di)) != NULL) { - robj *key, *o; + robj *key, *o, *kcopy; time_t expiretime; memset(digest,0,20); /* This key-val digest */ key = dictGetEntryKey(de); - mixObjectDigest(digest,key); - if (!server.vm_enabled || key->storage == REDIS_VM_MEMORY || - key->storage == REDIS_VM_SWAPPING) { + + if (!server.vm_enabled) { + mixObjectDigest(digest,key); o = dictGetEntryVal(de); - incrRefCount(o); } else { - o = vmPreviewObject(key); + /* Don't work with the key directly as when VM is active + * this is unsafe: TODO: fix decrRefCount to check if the + * count really reached 0 to avoid this mess */ + kcopy = dupStringObject(key); + mixObjectDigest(digest,kcopy); + o = lookupKeyRead(db,kcopy); + decrRefCount(kcopy); } aux = htonl(o->type); mixDigest(digest,&aux,sizeof(aux)); @@ -10512,7 +10517,6 @@ static void computeDatasetDigest(unsigned char *final) { } else { redisPanic("Unknown object type"); } - decrRefCount(o); /* If the key has an expire, add it to the mix */ if (expiretime != -1) xorDigest(digest,"!!expire!!",10); /* We can finally xor the key-val digest to the final digest */ diff --git a/staticsymbols.h b/staticsymbols.h index 9f8481d55..30c4d779a 100644 --- a/staticsymbols.h +++ b/staticsymbols.h @@ -180,6 +180,7 @@ static struct redisFunctionSym symsTable[] = { {"oom",(unsigned long)oom}, {"pingCommand",(unsigned long)pingCommand}, {"popGenericCommand",(unsigned long)popGenericCommand}, +{"prepareForShutdown",(unsigned long)prepareForShutdown}, {"processCommand",(unsigned long)processCommand}, {"processInputBuffer",(unsigned long)processInputBuffer}, {"psubscribeCommand",(unsigned long)psubscribeCommand}, @@ -260,6 +261,7 @@ static struct redisFunctionSym symsTable[] = { {"setnxCommand",(unsigned long)setnxCommand}, {"setupSigSegvAction",(unsigned long)setupSigSegvAction}, {"shutdownCommand",(unsigned long)shutdownCommand}, +{"sigtermHandler",(unsigned long)sigtermHandler}, {"sinterCommand",(unsigned long)sinterCommand}, {"sinterGenericCommand",(unsigned long)sinterGenericCommand}, {"sinterstoreCommand",(unsigned long)sinterstoreCommand}, @@ -272,6 +274,8 @@ static struct redisFunctionSym symsTable[] = { {"spopCommand",(unsigned long)spopCommand}, {"srandmemberCommand",(unsigned long)srandmemberCommand}, {"sremCommand",(unsigned long)sremCommand}, +{"startAppendOnly",(unsigned long)startAppendOnly}, +{"stopAppendOnly",(unsigned long)stopAppendOnly}, {"stringObjectLen",(unsigned long)stringObjectLen}, {"stringmatch",(unsigned long)stringmatch}, {"stringmatchlen",(unsigned long)stringmatchlen}, -- GitLab