diff --git a/src/rdb.c b/src/rdb.c index 73bc143f57de..e94a79125517 100644 --- a/src/rdb.c +++ b/src/rdb.c @@ -2425,7 +2425,7 @@ int rdbLoad(char *filename, rdbSaveInfo *rsi, int rdbflags) { /* A background saving child (BGSAVE) terminated its work. Handle this. * This function covers the case of actual BGSAVEs. */ -void backgroundSaveDoneHandlerDisk(int exitcode, int bysignal) { +static void backgroundSaveDoneHandlerDisk(int exitcode, int bysignal) { if (!bysignal && exitcode == 0) { serverLog(LL_NOTICE, "Background saving terminated with success"); @@ -2449,19 +2449,12 @@ void backgroundSaveDoneHandlerDisk(int exitcode, int bysignal) { if (bysignal != SIGUSR1) server.lastbgsave_status = C_ERR; } - server.rdb_child_pid = -1; - server.rdb_child_type = RDB_CHILD_TYPE_NONE; - server.rdb_save_time_last = time(NULL)-server.rdb_save_time_start; - server.rdb_save_time_start = -1; - /* Possibly there are slaves waiting for a BGSAVE in order to be served - * (the first stage of SYNC is a bulk transfer of dump.rdb) */ - updateSlavesWaitingBgsave((!bysignal && exitcode == 0) ? C_OK : C_ERR, RDB_CHILD_TYPE_DISK); } /* A background saving child (BGSAVE) terminated its work. Handle this. * This function covers the case of RDB -> Slaves socket transfers for * diskless replication. */ -void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) { +static void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) { if (!bysignal && exitcode == 0) { serverLog(LL_NOTICE, "Background RDB transfer terminated with success"); @@ -2471,9 +2464,6 @@ void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) { serverLog(LL_WARNING, "Background transfer terminated by signal %d", bysignal); } - server.rdb_child_pid = -1; - server.rdb_child_type = RDB_CHILD_TYPE_NONE; - server.rdb_save_time_start = -1; if (server.rdb_child_exit_pipe!=-1) close(server.rdb_child_exit_pipe); close(server.rdb_pipe_read); @@ -2486,12 +2476,11 @@ void backgroundSaveDoneHandlerSocket(int exitcode, int bysignal) { zfree(server.rdb_pipe_buff); server.rdb_pipe_buff = NULL; server.rdb_pipe_bufflen = 0; - - updateSlavesWaitingBgsave((!bysignal && exitcode == 0) ? C_OK : C_ERR, RDB_CHILD_TYPE_SOCKET); } /* When a background RDB saving/transfer terminates, call the right handler. */ void backgroundSaveDoneHandler(int exitcode, int bysignal) { + int type = server.rdb_child_type; switch(server.rdb_child_type) { case RDB_CHILD_TYPE_DISK: backgroundSaveDoneHandlerDisk(exitcode,bysignal); @@ -2503,6 +2492,14 @@ void backgroundSaveDoneHandler(int exitcode, int bysignal) { serverPanic("Unknown RDB child type."); break; } + + server.rdb_child_pid = -1; + server.rdb_child_type = RDB_CHILD_TYPE_NONE; + server.rdb_save_time_last = time(NULL)-server.rdb_save_time_start; + server.rdb_save_time_start = -1; + /* Possibly there are slaves waiting for a BGSAVE in order to be served + * (the first stage of SYNC is a bulk transfer of dump.rdb) */ + updateSlavesWaitingBgsave((!bysignal && exitcode == 0) ? C_OK : C_ERR, type); } /* Kill the RDB saving child using SIGUSR1 (so that the parent will know