]> git.saurik.com Git - redis.git/commitdiff
For coverage testing use exit() instead of _exit() when termiating saving children.
authorantirez <antirez@gmail.com>
Sat, 7 Apr 2012 10:11:23 +0000 (12:11 +0200)
committerantirez <antirez@gmail.com>
Sat, 7 Apr 2012 10:11:23 +0000 (12:11 +0200)
src/Makefile
src/aof.c
src/rdb.c
src/redis.c
src/redis.h

index 8e9f0e345168e5216936e62e6198d3d04eab0aea..e94d03fd66b91d8d23397653a2ae52a6bd15bedb 100644 (file)
@@ -263,7 +263,7 @@ gprof:
        $(MAKE) PROF="-pg"
 
 gcov:
-       $(MAKE) PROF="-fprofile-arcs -ftest-coverage"
+       $(MAKE) PROF="-fprofile-arcs -ftest-coverage -DCOVERAGE_TEST"
 
 noopt:
        $(MAKE) OPTIMIZATION=""
index 3f7cd10ffb87b1da7e4d0039b55c5d3a10c1dca3..115da29bae2fd7243b823ab6c3b0475dbadcdcdc 100644 (file)
--- a/src/aof.c
+++ b/src/aof.c
@@ -803,9 +803,9 @@ int rewriteAppendOnlyFileBackground(void) {
         if (server.sofd > 0) close(server.sofd);
         snprintf(tmpfile,256,"temp-rewriteaof-bg-%d.aof", (int) getpid());
         if (rewriteAppendOnlyFile(tmpfile) == REDIS_OK) {
-            _exit(0);
+            exitFromChild(0);
         } else {
-            _exit(1);
+            exitFromChild(1);
         }
     } else {
         /* Parent */
index 6736d8fcb105b9104cd14f49c7a245ace4209ad0..abb966e0281be1ca94581665d71b2b404ed26fab 100644 (file)
--- a/src/rdb.c
+++ b/src/rdb.c
@@ -686,7 +686,7 @@ int rdbSaveBackground(char *filename) {
         if (server.ipfd > 0) close(server.ipfd);
         if (server.sofd > 0) close(server.sofd);
         retval = rdbSave(filename);
-        _exit((retval == REDIS_OK) ? 0 : 1);
+        exitFromChild((retval == REDIS_OK) ? 0 : 1);
     } else {
         /* Parent */
         server.stat_fork_time = ustime()-start;
index bdbec7a39b263a7f85d2665d5885eaad8a0e5a20..84221addaaea1755881458a208fb4af388266e3b 100644 (file)
@@ -356,6 +356,18 @@ long long mstime(void) {
     return ustime()/1000;
 }
 
+/* After an RDB dump or AOF rewrite we exit from children using _exit() instead of
+ * exit(), because the latter may interact with the same file objects used by
+ * the parent process. However if we are testing the coverage normal exit() is
+ * used in order to obtain the right coverage information. */
+void exitFromChild(int retcode) {
+#ifdef COVERAGE_TEST
+    exit(retcode);
+#else
+    _exit(retcode);
+#endif
+}
+
 /*====================== Hash table type implementation  ==================== */
 
 /* This is an hash table type that uses the SDS dynamic strings libary as
index b386f16c969677df6355afc1f0d14d1ba53a2b02..ba209c7b994ad0f40b17ca8846b41c671a0f3543 100644 (file)
@@ -828,6 +828,7 @@ long long ustime(void);
 long long mstime(void);
 void getRandomHexChars(char *p, unsigned int len);
 uint64_t crc64(const unsigned char *s, uint64_t l);
+void exitFromChild(int retcode);
 
 /* networking.c -- Networking and Client related operations */
 redisClient *createClient(int fd);