Fixing 0-chunk bug in remote logging.

This commit is contained in:
Robin Sommer 2011-07-19 16:29:15 -07:00
parent b2a3723a1d
commit 38bc560358

View file

@ -2558,7 +2558,10 @@ bool RemoteSerializer::SendLogWrite(Peer* peer, EnumVal* id, EnumVal* writer, st
// Do we have enough space in the buffer? If not, flush first. // Do we have enough space in the buffer? If not, flush first.
if ( len > (LOG_BUFFER_SIZE - peer->log_buffer_used) ) if ( len > (LOG_BUFFER_SIZE - peer->log_buffer_used) )
FlushLogBuffer(peer); {
if ( ! FlushLogBuffer(peer) )
return false;
}
// If the data is actually larger than our complete buffer, just send it out. // If the data is actually larger than our complete buffer, just send it out.
if ( len > LOG_BUFFER_SIZE ) if ( len > LOG_BUFFER_SIZE )
@ -2569,8 +2572,8 @@ bool RemoteSerializer::SendLogWrite(Peer* peer, EnumVal* id, EnumVal* writer, st
peer->log_buffer_used += len; peer->log_buffer_used += len;
assert(peer->log_buffer_used <= LOG_BUFFER_SIZE); assert(peer->log_buffer_used <= LOG_BUFFER_SIZE);
FlushLogBuffer(peer); FlushLogBuffer(peer); // FIXME: This should go away, but then the unit test fails. See #498.
return false; return true;
error: error:
FatalError(io->Error()); FatalError(io->Error());
@ -2582,7 +2585,7 @@ bool RemoteSerializer::FlushLogBuffer(Peer* p)
if ( p->state == Peer::CLOSING ) if ( p->state == Peer::CLOSING )
return false; return false;
if ( ! p->log_buffer ) if ( ! (p->log_buffer && p->log_buffer_used) )
return true; return true;
SendToChild(MSG_LOG_WRITE, p, p->log_buffer, p->log_buffer_used); SendToChild(MSG_LOG_WRITE, p, p->log_buffer, p->log_buffer_used);