Use a timeout when reading parent ack from AOF child.

This commit is contained in:
antirez 2014-07-04 15:35:01 +02:00
parent 2fa9fb647f
commit 75ef41058d

View File

@ -1040,9 +1040,15 @@ int rewriteAppendOnlyFile(char *filename) {
}
/* Ask the master to stop sending diffs. */
write(server.aof_pipe_write_ack_to_parent,"!",1);
if (read(server.aof_pipe_read_ack_from_parent,&byte,1) != 1 ||
if (write(server.aof_pipe_write_ack_to_parent,"!",1) != 1) goto werr;
if (anetNonBlock(NULL,server.aof_pipe_read_ack_from_parent) != ANET_OK)
goto werr;
/* We read the ACK from the server using a 10 seconds timeout. Normally
* it should reply ASAP, but just in case we lose its reply, we are sure
* the child will eventually get terminated. */
if (syncRead(server.aof_pipe_read_ack_from_parent,&byte,1,5000) != 1 ||
byte != '!') goto werr;
redisLog(REDIS_NOTICE,"Parent agreed to stop sending diffs. Finalizing AOF...");
/* Read the final diff if any. */
aofReadDiffFromParent();