]> 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>
Sun, 8 Apr 2012 08:43:29 +0000 (10:43 +0200)
src/Makefile
src/aof.c
src/rdb.c
src/redis.c
src/redis.h

index 11f270b9d1e7a6c522a2a485d665c10c063809d2..8116ee2be068d9f1452777d9c6397ece49daf6fa 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 14812cf0832fa5bc6e3f6dbf2839402dfb235dba..c79f49d41a2909f12bd450f03c87bf254ffabf49 100644 (file)
@@ -354,6 +354,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 9d0e19ff2c54cd7b4889d5d4c1dbbd90d4b9f6b3..e86823db835502aba58891264fb6ca9178567ce5 100644 (file)
@@ -694,6 +694,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);