aofChildWriteDiffData() better handling of free blocks.

This commit is contained in:
antirez 2014-07-05 01:11:28 +02:00
parent ac33c049c6
commit 93cd75bbe0

View File

@ -104,10 +104,13 @@ void aofChildWriteDiffData(aeEventLoop *el, int fd, void *privdata, int mask) {
AE_WRITABLE); AE_WRITABLE);
return; return;
} }
nwritten = write(server.aof_pipe_write_data_to_child,block->buf,block->used); if (block->used > 0) {
if (nwritten <= 0) return; nwritten = write(server.aof_pipe_write_data_to_child,
memmove(block->buf,block->buf+nwritten,block->used-nwritten); block->buf,block->used);
block->used -= nwritten; if (nwritten <= 0) return;
memmove(block->buf,block->buf+nwritten,block->used-nwritten);
block->used -= nwritten;
}
if (block->used == 0) listDelNode(server.aof_rewrite_buf_blocks,ln); if (block->used == 0) listDelNode(server.aof_rewrite_buf_blocks,ln);
} }
} }