]> git.saurik.com Git - redis.git/commitdiff
minor merge conflicts merging cli-help branch fixed
authorantirez <antirez@gmail.com>
Tue, 30 Nov 2010 10:39:55 +0000 (11:39 +0100)
committerantirez <antirez@gmail.com>
Tue, 30 Nov 2010 10:39:55 +0000 (11:39 +0100)
.gitignore
deps/hiredis/Makefile
deps/hiredis/hiredis.c
src/Makefile
src/debug.c
src/rdb.c
src/redis-cli.c
src/redis.c
src/redis.h
src/vm.c

index 6d12b5e234fe591f046c2ec90b515145e0951d14..0d48fc80fe992fcb5ba1c1f402435b8bf92ad11c 100644 (file)
@@ -18,3 +18,5 @@ SHORT_TERM_TODO
 redis.conf.*
 release.h
 src/transfer.sh
+src/configs
+src/redis-server.dSYM
index 2ae73d4f2b95001e7146a42cca14e3e1ccab23a6..3c4b6ce28798ccb28e2d6cdff9871513bf7df367 100644 (file)
@@ -90,13 +90,13 @@ install: ${DYLIBNAME} ${STLIBNAME}
        @echo ""
        @echo "WARNING: if it fails under Linux you probably need to install libc6-dev-i386"
        @echo ""
-       make ARCH="-m32"
+       $(MAKE) ARCH="-m32"
 
 gprof:
-       make PROF="-pg"
+       $(MAKE) PROF="-pg"
 
 gcov:
-       make PROF="-fprofile-arcs -ftest-coverage"
+       $(MAKE) PROF="-fprofile-arcs -ftest-coverage"
 
 noopt:
-       make OPTIMIZATION=""
+       $(MAKE) OPTIMIZATION=""
index f0d78a0dac06c3466a762674d75442624f6580bc..898b4d6afa950184bc5bf8f1e05182e318313364 100644 (file)
@@ -664,6 +664,7 @@ void __redisSetError(redisContext *c, int type, const sds errstr) {
 
 static redisContext *redisContextInit() {
     redisContext *c = calloc(sizeof(redisContext),1);
+    c->fd = -1; /* quick fix for a bug that should be addressed differently */
     c->err = 0;
     c->errstr = NULL;
     c->obuf = sdsempty();
index ac0db5770af95ffa68d41973b1897c239c0f5c4f..70e15ae399d956012841b6755db30c70aa33d665 100644 (file)
@@ -109,15 +109,15 @@ redis-server: $(OBJ)
        @echo ""
 
 redis-benchmark: $(BENCHOBJ)
-       cd ../deps/hiredis && make static
+       cd ../deps/hiredis && $(MAKE) static
        $(CC) -o $(BENCHPRGNAME) $(CCOPT) $(DEBUG) $(BENCHOBJ) ../deps/hiredis/libhiredis.a
 
 redis-benchmark.o:
        $(CC) -c $(CFLAGS) -I../deps/hiredis $(DEBUG) $(COMPILE_TIME) $<
 
 redis-cli: $(CLIOBJ)
-       cd ../deps/hiredis && make static ARCH="$(ARCH)"
-       cd ../deps/linenoise && make ARCH="$(ARCH)"
+       cd ../deps/hiredis && $(MAKE) static ARCH="$(ARCH)"
+       cd ../deps/linenoise && $(MAKE) ARCH="$(ARCH)"
        $(CC) -o $(CLIPRGNAME) $(CCOPT) $(DEBUG) $(CLIOBJ) ../deps/hiredis/libhiredis.a ../deps/linenoise/linenoise.o
 
 redis-cli.o:
@@ -134,8 +134,8 @@ redis-check-aof: $(CHECKAOFOBJ)
 
 clean:
        rm -rf $(PRGNAME) $(BENCHPRGNAME) $(CLIPRGNAME) $(CHECKDUMPPRGNAME) $(CHECKAOFPRGNAME) *.o *.gcda *.gcno *.gcov
-       cd ../deps/hiredis && make clean
-       cd ../deps/linenoise && make clean
+       cd ../deps/hiredis && $(MAKE) clean
+       cd ../deps/linenoise && $(MAKE) clean
 
 dep:
        $(CC) -MM *.c
@@ -153,19 +153,19 @@ log:
        @echo ""
        @echo "WARNING: if it fails under Linux you probably need to install libc6-dev-i386"
        @echo ""
-       make ARCH="-m32"
+       $(MAKE) ARCH="-m32"
 
 gprof:
-       make PROF="-pg"
+       $(MAKE) PROF="-pg"
 
 gcov:
-       make PROF="-fprofile-arcs -ftest-coverage"
+       $(MAKE) PROF="-fprofile-arcs -ftest-coverage"
 
 noopt:
-       make OPTIMIZATION=""
+       $(MAKE) OPTIMIZATION=""
 
 32bitgprof:
-       make PROF="-pg" ARCH="-arch i386"
+       $(MAKE) PROF="-pg" ARCH="-arch i386"
 
 install: all
        mkdir -p $(INSTALL_BIN)
index b364dd1635ad9acef4569d486ef77d331aa5f967..9e97868ddf35148db63091346acdd03128e33be1 100644 (file)
@@ -216,7 +216,7 @@ void debugCommand(redisClient *c) {
                 "encoding:%s serializedlength:%lld "
                 "lru:%d lru_seconds_idle:%lu",
                 (void*)val, val->refcount,
-                strenc, (long long) rdbSavedObjectLen(val,NULL),
+                strenc, (long long) rdbSavedObjectLen(val),
                 val->lru, estimateObjectIdleTime(val));
         } else {
             vmpointer *vp = (vmpointer*) val;
index ce4b3566e8b0c0fd809c925781e4886ea4e540fe..5e69a32443a31f673b9a825dc80492a739fbc15b 100644 (file)
--- a/src/rdb.c
+++ b/src/rdb.c
@@ -9,38 +9,49 @@
 #include <arpa/inet.h>
 #include <sys/stat.h>
 
+/* Convenience wrapper around fwrite, that returns the number of bytes written
+ * to the file instead of the number of objects (see fwrite(3)) and -1 in the
+ * case of an error. It also supports a NULL *fp to skip writing altogether
+ * instead of writing to /dev/null. */
+static int rdbWriteRaw(FILE *fp, void *p, size_t len) {
+    if (fp != NULL && fwrite(p,len,1,fp) == 0) return -1;
+    return len;
+}
+
 int rdbSaveType(FILE *fp, unsigned char type) {
-    if (fwrite(&type,1,1,fp) == 0) return -1;
-    return 0;
+    return rdbWriteRaw(fp,&type,1);
 }
 
 int rdbSaveTime(FILE *fp, time_t t) {
     int32_t t32 = (int32_t) t;
-    if (fwrite(&t32,4,1,fp) == 0) return -1;
-    return 0;
+    return rdbWriteRaw(fp,&t32,4);
 }
 
 /* check rdbLoadLen() comments for more info */
 int rdbSaveLen(FILE *fp, uint32_t len) {
     unsigned char buf[2];
+    int nwritten;
 
     if (len < (1<<6)) {
         /* Save a 6 bit len */
         buf[0] = (len&0xFF)|(REDIS_RDB_6BITLEN<<6);
-        if (fwrite(buf,1,1,fp) == 0) return -1;
+        if (rdbWriteRaw(fp,buf,1) == -1) return -1;
+        nwritten = 1;
     } else if (len < (1<<14)) {
         /* Save a 14 bit len */
         buf[0] = ((len>>8)&0xFF)|(REDIS_RDB_14BITLEN<<6);
         buf[1] = len&0xFF;
-        if (fwrite(buf,2,1,fp) == 0) return -1;
+        if (rdbWriteRaw(fp,buf,2) == -1) return -1;
+        nwritten = 2;
     } else {
         /* Save a 32 bit len */
         buf[0] = (REDIS_RDB_32BITLEN<<6);
-        if (fwrite(buf,1,1,fp) == 0) return -1;
+        if (rdbWriteRaw(fp,buf,1) == -1) return -1;
         len = htonl(len);
-        if (fwrite(&len,4,1,fp) == 0) return -1;
+        if (rdbWriteRaw(fp,&len,4) == -1) return -1;
+        nwritten = 1+4;
     }
-    return 0;
+    return nwritten;
 }
 
 /* Encode 'value' as an integer if possible (if integer will fit the
@@ -93,6 +104,7 @@ int rdbTryIntegerEncoding(char *s, size_t len, unsigned char *enc) {
 int rdbSaveLzfStringObject(FILE *fp, unsigned char *s, size_t len) {
     size_t comprlen, outlen;
     unsigned char byte;
+    int n, nwritten = 0;
     void *out;
 
     /* We require at least four bytes compression for this to be worth it */
@@ -106,12 +118,20 @@ int rdbSaveLzfStringObject(FILE *fp, unsigned char *s, size_t len) {
     }
     /* Data compressed! Let's save it on disk */
     byte = (REDIS_RDB_ENCVAL<<6)|REDIS_RDB_ENC_LZF;
-    if (fwrite(&byte,1,1,fp) == 0) goto writeerr;
-    if (rdbSaveLen(fp,comprlen) == -1) goto writeerr;
-    if (rdbSaveLen(fp,len) == -1) goto writeerr;
-    if (fwrite(out,comprlen,1,fp) == 0) goto writeerr;
+    if ((n = rdbWriteRaw(fp,&byte,1)) == -1) goto writeerr;
+    nwritten += n;
+
+    if ((n = rdbSaveLen(fp,comprlen)) == -1) goto writeerr;
+    nwritten += n;
+
+    if ((n = rdbSaveLen(fp,len)) == -1) goto writeerr;
+    nwritten += n;
+
+    if ((n = rdbWriteRaw(fp,out,comprlen)) == -1) goto writeerr;
+    nwritten += n;
+
     zfree(out);
-    return comprlen;
+    return nwritten;
 
 writeerr:
     zfree(out);
@@ -122,47 +142,53 @@ writeerr:
  * representation of an integer value we try to safe it in a special form */
 int rdbSaveRawString(FILE *fp, unsigned char *s, size_t len) {
     int enclen;
+    int n, nwritten = 0;
 
     /* Try integer encoding */
     if (len <= 11) {
         unsigned char buf[5];
         if ((enclen = rdbTryIntegerEncoding((char*)s,len,buf)) > 0) {
-            if (fwrite(buf,enclen,1,fp) == 0) return -1;
-            return 0;
+            if (rdbWriteRaw(fp,buf,enclen) == -1) return -1;
+            return enclen;
         }
     }
 
     /* Try LZF compression - under 20 bytes it's unable to compress even
      * aaaaaaaaaaaaaaaaaa so skip it */
     if (server.rdbcompression && len > 20) {
-        int retval;
-
-        retval = rdbSaveLzfStringObject(fp,s,len);
-        if (retval == -1) return -1;
-        if (retval > 0) return 0;
-        /* retval == 0 means data can't be compressed, save the old way */
+        n = rdbSaveLzfStringObject(fp,s,len);
+        if (n == -1) return -1;
+        if (n > 0) return n;
+        /* Return value of 0 means data can't be compressed, save the old way */
     }
 
     /* Store verbatim */
-    if (rdbSaveLen(fp,len) == -1) return -1;
-    if (len && fwrite(s,len,1,fp) == 0) return -1;
-    return 0;
+    if ((n = rdbSaveLen(fp,len)) == -1) return -1;
+    nwritten += n;
+    if (len > 0) {
+        if (rdbWriteRaw(fp,s,len) == -1) return -1;
+        nwritten += len;
+    }
+    return nwritten;
 }
 
 /* Save a long long value as either an encoded string or a string. */
 int rdbSaveLongLongAsStringObject(FILE *fp, long long value) {
     unsigned char buf[32];
+    int n, nwritten = 0;
     int enclen = rdbEncodeInteger(value,buf);
     if (enclen > 0) {
-        if (fwrite(buf,enclen,1,fp) == 0) return -1;
+        return rdbWriteRaw(fp,buf,enclen);
     } else {
         /* Encode as string */
         enclen = ll2string((char*)buf,32,value);
         redisAssert(enclen < 32);
-        if (rdbSaveLen(fp,enclen) == -1) return -1;
-        if (fwrite(buf,enclen,1,fp) == 0) return -1;
+        if ((n = rdbSaveLen(fp,enclen)) == -1) return -1;
+        nwritten += n;
+        if ((n = rdbWriteRaw(fp,buf,enclen)) == -1) return -1;
+        nwritten += n;
     }
-    return 0;
+    return nwritten;
 }
 
 /* Like rdbSaveStringObjectRaw() but handle encoded objects */
@@ -216,15 +242,17 @@ int rdbSaveDoubleValue(FILE *fp, double val) {
         buf[0] = strlen((char*)buf+1);
         len = buf[0]+1;
     }
-    if (fwrite(buf,len,1,fp) == 0) return -1;
-    return 0;
+    return rdbWriteRaw(fp,buf,len);
 }
 
 /* Save a Redis object. */
 int rdbSaveObject(FILE *fp, robj *o) {
+    int n, nwritten = 0;
+
     if (o->type == REDIS_STRING) {
         /* Save a string value */
-        if (rdbSaveStringObject(fp,o) == -1) return -1;
+        if ((n = rdbSaveStringObject(fp,o)) == -1) return -1;
+        nwritten += n;
     } else if (o->type == REDIS_LIST) {
         /* Save a list value */
         if (o->encoding == REDIS_ENCODING_ZIPLIST) {
@@ -233,15 +261,19 @@ int rdbSaveObject(FILE *fp, robj *o) {
             unsigned int vlen;
             long long vlong;
 
-            if (rdbSaveLen(fp,ziplistLen(o->ptr)) == -1) return -1;
+            if ((n = rdbSaveLen(fp,ziplistLen(o->ptr))) == -1) return -1;
+            nwritten += n;
+
             p = ziplistIndex(o->ptr,0);
             while(ziplistGet(p,&vstr,&vlen,&vlong)) {
                 if (vstr) {
-                    if (rdbSaveRawString(fp,vstr,vlen) == -1)
+                    if ((n = rdbSaveRawString(fp,vstr,vlen)) == -1)
                         return -1;
+                    nwritten += n;
                 } else {
-                    if (rdbSaveLongLongAsStringObject(fp,vlong) == -1)
+                    if ((n = rdbSaveLongLongAsStringObject(fp,vlong)) == -1)
                         return -1;
+                    nwritten += n;
                 }
                 p = ziplistNext(o->ptr,p);
             }
@@ -250,11 +282,14 @@ int rdbSaveObject(FILE *fp, robj *o) {
             listIter li;
             listNode *ln;
 
-            if (rdbSaveLen(fp,listLength(list)) == -1) return -1;
+            if ((n = rdbSaveLen(fp,listLength(list))) == -1) return -1;
+            nwritten += n;
+
             listRewind(list,&li);
             while((ln = listNext(&li))) {
                 robj *eleobj = listNodeValue(ln);
-                if (rdbSaveStringObject(fp,eleobj) == -1) return -1;
+                if ((n = rdbSaveStringObject(fp,eleobj)) == -1) return -1;
+                nwritten += n;
             }
         } else {
             redisPanic("Unknown list encoding");
@@ -266,10 +301,13 @@ int rdbSaveObject(FILE *fp, robj *o) {
             dictIterator *di = dictGetIterator(set);
             dictEntry *de;
 
-            if (rdbSaveLen(fp,dictSize(set)) == -1) return -1;
+            if ((n = rdbSaveLen(fp,dictSize(set))) == -1) return -1;
+            nwritten += n;
+
             while((de = dictNext(di)) != NULL) {
                 robj *eleobj = dictGetEntryKey(de);
-                if (rdbSaveStringObject(fp,eleobj) == -1) return -1;
+                if ((n = rdbSaveStringObject(fp,eleobj)) == -1) return -1;
+                nwritten += n;
             }
             dictReleaseIterator(di);
         } else if (o->encoding == REDIS_ENCODING_INTSET) {
@@ -277,9 +315,12 @@ int rdbSaveObject(FILE *fp, robj *o) {
             int64_t llval;
             int i = 0;
 
-            if (rdbSaveLen(fp,intsetLen(is)) == -1) return -1;
+            if ((n = rdbSaveLen(fp,intsetLen(is))) == -1) return -1;
+            nwritten += n;
+
             while(intsetGet(is,i++,&llval)) {
-                if (rdbSaveLongLongAsStringObject(fp,llval) == -1) return -1;
+                if ((n = rdbSaveLongLongAsStringObject(fp,llval)) == -1) return -1;
+                nwritten += n;
             }
         } else {
             redisPanic("Unknown set encoding");
@@ -290,13 +331,17 @@ int rdbSaveObject(FILE *fp, robj *o) {
         dictIterator *di = dictGetIterator(zs->dict);
         dictEntry *de;
 
-        if (rdbSaveLen(fp,dictSize(zs->dict)) == -1) return -1;
+        if ((n = rdbSaveLen(fp,dictSize(zs->dict))) == -1) return -1;
+        nwritten += n;
+
         while((de = dictNext(di)) != NULL) {
             robj *eleobj = dictGetEntryKey(de);
             double *score = dictGetEntryVal(de);
 
-            if (rdbSaveStringObject(fp,eleobj) == -1) return -1;
-            if (rdbSaveDoubleValue(fp,*score) == -1) return -1;
+            if ((n = rdbSaveStringObject(fp,eleobj)) == -1) return -1;
+            nwritten += n;
+            if ((n = rdbSaveDoubleValue(fp,*score)) == -1) return -1;
+            nwritten += n;
         }
         dictReleaseIterator(di);
     } else if (o->type == REDIS_HASH) {
@@ -307,46 +352,52 @@ int rdbSaveObject(FILE *fp, robj *o) {
             unsigned char *key, *val;
             unsigned int klen, vlen;
 
-            if (rdbSaveLen(fp,count) == -1) return -1;
+            if ((n = rdbSaveLen(fp,count)) == -1) return -1;
+            nwritten += n;
+
             while((p = zipmapNext(p,&key,&klen,&val,&vlen)) != NULL) {
-                if (rdbSaveRawString(fp,key,klen) == -1) return -1;
-                if (rdbSaveRawString(fp,val,vlen) == -1) return -1;
+                if ((n = rdbSaveRawString(fp,key,klen)) == -1) return -1;
+                nwritten += n;
+                if ((n = rdbSaveRawString(fp,val,vlen)) == -1) return -1;
+                nwritten += n;
             }
         } else {
             dictIterator *di = dictGetIterator(o->ptr);
             dictEntry *de;
 
-            if (rdbSaveLen(fp,dictSize((dict*)o->ptr)) == -1) return -1;
+            if ((n = rdbSaveLen(fp,dictSize((dict*)o->ptr))) == -1) return -1;
+            nwritten += n;
+
             while((de = dictNext(di)) != NULL) {
                 robj *key = dictGetEntryKey(de);
                 robj *val = dictGetEntryVal(de);
 
-                if (rdbSaveStringObject(fp,key) == -1) return -1;
-                if (rdbSaveStringObject(fp,val) == -1) return -1;
+                if ((n = rdbSaveStringObject(fp,key)) == -1) return -1;
+                nwritten += n;
+                if ((n = rdbSaveStringObject(fp,val)) == -1) return -1;
+                nwritten += n;
             }
             dictReleaseIterator(di);
         }
     } else {
         redisPanic("Unknown object type");
     }
-    return 0;
+    return nwritten;
 }
 
 /* Return the length the object will have on disk if saved with
  * the rdbSaveObject() function. Currently we use a trick to get
  * this length with very little changes to the code. In the future
  * we could switch to a faster solution. */
-off_t rdbSavedObjectLen(robj *o, FILE *fp) {
-    if (fp == NULL) fp = server.devnull;
-    rewind(fp);
-    redisAssert(rdbSaveObject(fp,o) != 1);
-    return ftello(fp);
+off_t rdbSavedObjectLen(robj *o) {
+    int len = rdbSaveObject(NULL,o);
+    redisAssert(len != -1);
+    return len;
 }
 
 /* Return the number of pages required to save this object in the swap file */
-off_t rdbSavedObjectPages(robj *o, FILE *fp) {
-    off_t bytes = rdbSavedObjectLen(o,fp);
-
+off_t rdbSavedObjectPages(robj *o) {
+    off_t bytes = rdbSavedObjectLen(o);
     return (bytes+(server.vm_page_size-1))/server.vm_page_size;
 }
 
index e22ba3766a46152891795984a707655c2fa4bb2f..a3987472283bd9de657464f7e143a724cc3daf55 100644 (file)
@@ -402,6 +402,11 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
     size_t *argvlen;
     int j;
 
+    if (context == NULL) {
+        printf("Not connected, please use: connect <host> <port>\n");
+        return REDIS_OK;
+    }
+
     config.raw_output = !strcasecmp(command,"info");
     if (!strcasecmp(command,"help") || !strcasecmp(command,"?")) {
         cliOutputHelp(--argc, ++argv);
@@ -448,7 +453,8 @@ static int parseOptions(int argc, char **argv) {
         int lastarg = i==argc-1;
 
         if (!strcmp(argv[i],"-h") && !lastarg) {
-            config.hostip = argv[i+1];
+            sdsfree(config.hostip);
+            config.hostip = sdsnew(argv[i+1]);
             i++;
         } else if (!strcmp(argv[i],"-h") && lastarg) {
             usage();
@@ -536,7 +542,8 @@ static void repl() {
 
     config.interactive = 1;
     linenoiseSetCompletionCallback(completionCallback);
-    while((line = linenoise("redis> ")) != NULL) {
+
+    while((line = linenoise(context ? "redis> " : "not connected> ")) != NULL) {
         if (line[0] != '\0') {
             argv = sdssplitargs(line,&argc);
             linenoiseHistoryAdd(line);
@@ -549,14 +556,16 @@ static void repl() {
                     strcasecmp(argv[0],"exit") == 0)
                 {
                     exit(0);
+                } else if (argc == 3 && !strcasecmp(argv[0],"connect")) {
+                    sdsfree(config.hostip);
+                    config.hostip = sdsnew(argv[1]);
+                    config.hostport = atoi(argv[2]);
+                    cliConnect(1);
                 } else {
                     long long start_time = mstime(), elapsed;
 
                     if (cliSendCommand(argc,argv,1) != REDIS_OK) {
-                        printf("Reconnecting... ");
-                        fflush(stdout);
-                        if (cliConnect(1) != REDIS_OK) exit(1);
-                        printf("OK\n");
+                        cliConnect(1);
 
                         /* If we still cannot send the command,
                          * print error and abort. */
@@ -596,7 +605,7 @@ static int noninteractive(int argc, char **argv) {
 int main(int argc, char **argv) {
     int firstarg;
 
-    config.hostip = "127.0.0.1";
+    config.hostip = sdsnew("127.0.0.1");
     config.hostport = 6379;
     config.hostsocket = NULL;
     config.repeat = 1;
index cf5673a3aa4ce7e9276ba4feffe98e1c93c3edee..5b39c011f537e5e4e6845e483c3b4b90449e1bc1 100644 (file)
@@ -814,11 +814,6 @@ void initServer() {
     setupSigSegvAction();
 
     server.mainthread = pthread_self();
-    server.devnull = fopen("/dev/null","w");
-    if (server.devnull == NULL) {
-        redisLog(REDIS_WARNING, "Can't open /dev/null: %s", server.neterr);
-        exit(1);
-    }
     server.clients = listCreate();
     server.slaves = listCreate();
     server.monitors = listCreate();
index 087002bf72fe44e8ccdb9494270ec1595b1b197c..11e4e557f312a928942f2d7e9d479d463ef5abaa 100644 (file)
@@ -481,7 +481,6 @@ struct redisServer {
     dict *pubsub_channels; /* Map channels to list of subscribed clients */
     list *pubsub_patterns; /* A list of pubsub_patterns */
     /* Misc */
-    FILE *devnull;
     unsigned lruclock:22;        /* clock incrementing every minute, for LRU */
     unsigned lruclock_padding:10;
 };
@@ -743,8 +742,8 @@ int rdbSaveBackground(char *filename);
 void rdbRemoveTempFile(pid_t childpid);
 int rdbSave(char *filename);
 int rdbSaveObject(FILE *fp, robj *o);
-off_t rdbSavedObjectPages(robj *o, FILE *fp);
-off_t rdbSavedObjectLen(robj *o, FILE *fp);
+off_t rdbSavedObjectLen(robj *o);
+off_t rdbSavedObjectPages(robj *o);
 robj *rdbLoadObject(int type, FILE *fp);
 void backgroundSaveDoneHandler(int statloc);
 
index c2e0d9ed475bfe1b4576d00cf58d7118127a69a7..ac0d92e332cf091b88c5caeb2b3a9b439869a2a5 100644 (file)
--- a/src/vm.c
+++ b/src/vm.c
@@ -263,7 +263,7 @@ int vmWriteObjectOnSwap(robj *o, off_t page) {
  * If we can't find enough contiguous empty pages to swap the object on disk
  * NULL is returned. */
 vmpointer *vmSwapObjectBlocking(robj *val) {
-    off_t pages = rdbSavedObjectPages(val,NULL);
+    off_t pages = rdbSavedObjectPages(val);
     off_t page;
     vmpointer *vp;
 
@@ -821,9 +821,7 @@ void *IOThreadEntryPoint(void *arg) {
             vmpointer *vp = (vmpointer*)j->id;
             j->val = vmReadObjectFromSwap(j->page,vp->vtype);
         } else if (j->type == REDIS_IOJOB_PREPARE_SWAP) {
-            FILE *fp = fopen("/dev/null","w+");
-            j->pages = rdbSavedObjectPages(j->val,fp);
-            fclose(fp);
+            j->pages = rdbSavedObjectPages(j->val);
         } else if (j->type == REDIS_IOJOB_DO_SWAP) {
             if (vmWriteObjectOnSwap(j->val,j->page) == REDIS_ERR)
                 j->canceled = 1;