For coverage testing use exit() instead of _exit() when termiating saving children.

This commit is contained in:
antirez 2012-04-07 12:11:23 +02:00
parent 4ce22375f4
commit 2cbdab903f
5 changed files with 17 additions and 4 deletions

View 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=""

View File

@ -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 */

View File

@ -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;

View 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

View 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);