ndb - bug#34005

  make sure whole send buffer is flushed, even when wrapping around end
parent 88dc7e9d
...@@ -330,22 +330,32 @@ TCP_Transporter::doSend() { ...@@ -330,22 +330,32 @@ TCP_Transporter::doSend() {
// Empty the SendBuffers // Empty the SendBuffers
const char * const sendPtr = m_sendBuffer.sendPtr; bool sent_any = true;
const Uint32 sizeToSend = m_sendBuffer.sendDataSize; while (m_sendBuffer.dataSize > 0)
if (sizeToSend > 0){ {
const char * const sendPtr = m_sendBuffer.sendPtr;
const Uint32 sizeToSend = m_sendBuffer.sendDataSize;
const int nBytesSent = inet_send(theSocket, sendPtr, sizeToSend, 0); const int nBytesSent = inet_send(theSocket, sendPtr, sizeToSend, 0);
if (nBytesSent > 0) { if (nBytesSent > 0)
{
sent_any = true;
m_sendBuffer.bytesSent(nBytesSent); m_sendBuffer.bytesSent(nBytesSent);
sendCount ++; sendCount ++;
sendSize += nBytesSent; sendSize += nBytesSent;
if(sendCount == reportFreq){ if(sendCount == reportFreq)
{
reportSendLen(get_callback_obj(), remoteNodeId, sendCount, sendSize); reportSendLen(get_callback_obj(), remoteNodeId, sendCount, sendSize);
sendCount = 0; sendCount = 0;
sendSize = 0; sendSize = 0;
} }
} else { }
else
{
if (nBytesSent < 0 && InetErrno == EAGAIN && sent_any)
break;
// Send failed // Send failed
#if defined DEBUG_TRANSPORTER #if defined DEBUG_TRANSPORTER
ndbout_c("Send Failure(disconnect==%d) to node = %d nBytesSent = %d " ndbout_c("Send Failure(disconnect==%d) to node = %d nBytesSent = %d "
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment