We don't need to call PeerConnection::sendPendingData() twice when

sending piece message.
pull/1/head
Tatsuhiro Tsujikawa 2011-01-08 17:55:53 +09:00
parent 3020087a75
commit acfb290eca
2 changed files with 4 additions and 7 deletions

View File

@ -180,18 +180,16 @@ void BtPieceMessage::send()
A2_LOG_DEBUG(fmt("msglength = %lu bytes",
static_cast<unsigned long>(msgHdrLen+blockLength_)));
getPeerConnection()->pushBytes(msgHdr, msgHdrLen);
getPeerConnection()->sendPendingData();
off_t pieceDataOffset =
(off_t)index_*downloadContext_->getPieceLength()+begin_;
writtenLength = sendPieceData(pieceDataOffset, blockLength_);
} else {
writtenLength = getPeerConnection()->sendPendingData();
pushPieceData(pieceDataOffset, blockLength_);
}
writtenLength = getPeerConnection()->sendPendingData();
getPeer()->updateUploadLength(writtenLength);
setSendingInProgress(!getPeerConnection()->sendBufferIsEmpty());
}
size_t BtPieceMessage::sendPieceData(off_t offset, size_t length) const
void BtPieceMessage::pushPieceData(off_t offset, size_t length) const
{
assert(length <= 16*1024);
unsigned char* buf = new unsigned char[length];
@ -204,7 +202,6 @@ size_t BtPieceMessage::sendPieceData(off_t offset, size_t length) const
}
if(r == static_cast<ssize_t>(length)) {
getPeerConnection()->pushBytes(buf, length);
return getPeerConnection()->sendPendingData();
} else {
throw DL_ABORT_EX(EX_DATA_READ);
}

View File

@ -64,7 +64,7 @@ private:
void erasePieceOnDisk(const SharedHandle<Piece>& piece);
size_t sendPieceData(off_t offset, size_t length) const;
void pushPieceData(off_t offset, size_t length) const;
public:
BtPieceMessage(size_t index = 0, uint32_t begin = 0, size_t blockLength = 0);