]> git.saurik.com Git - redis.git/blobdiff - src/rdb.c
Fix for bug 312, yet to verify in a couple of minutes...
[redis.git] / src / rdb.c
index 019aa9a00da0a0cf4c6b8031f61b38904b500fd0..d8de5f76790e76cc55d823bc14dfe8108a2d84fd 100644 (file)
--- a/src/rdb.c
+++ b/src/rdb.c
@@ -273,7 +273,7 @@ int rdbSaveObject(FILE *fp, robj *o) {
             dictReleaseIterator(di);
         } else if (o->encoding == REDIS_ENCODING_INTSET) {
             intset *is = o->ptr;
-            long long llval;
+            int64_t llval;
             int i = 0;
 
             if (rdbSaveLen(fp,intsetLen(is)) == -1) return -1;
@@ -702,7 +702,7 @@ robj *rdbLoadObject(int type, FILE *fp) {
 
             if (o->encoding == REDIS_ENCODING_INTSET) {
                 /* Fetch integer value from element */
-                if (getLongLongFromObject(ele,&llval) == REDIS_OK) {
+                if (isObjectRepresentableAsLongLong(ele,&llval) == REDIS_OK) {
                     o->ptr = intsetAdd(o->ptr,llval,NULL);
                 } else {
                     setTypeConvert(o,REDIS_ENCODING_HT);
@@ -714,6 +714,8 @@ robj *rdbLoadObject(int type, FILE *fp) {
              * to regular hashtable encoded set */
             if (o->encoding == REDIS_ENCODING_HT) {
                 dictAdd((dict*)o->ptr,ele,NULL);
+            } else {
+                decrRefCount(ele);
             }
         }
     } else if (type == REDIS_ZSET) {