summaryrefslogtreecommitdiff
path: root/src/DownloadCommand.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/DownloadCommand.cc')
-rw-r--r--src/DownloadCommand.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/DownloadCommand.cc b/src/DownloadCommand.cc
index 5be8d551..20337611 100644
--- a/src/DownloadCommand.cc
+++ b/src/DownloadCommand.cc
@@ -134,6 +134,7 @@ bool DownloadCommand::executeInternal() {
|| getRequestGroup()->doesDownloadSpeedExceed()) {
addCommandSelf();
disableReadCheckSocket();
+ disableWriteCheckSocket();
return false;
}
setReadCheckSocket(getSocket());
@@ -195,7 +196,8 @@ bool DownloadCommand::executeInternal() {
// Note that GrowSegment::complete() always returns false.
if(sinkFilterOnly_) {
if(segment->complete() ||
- segment->getPositionToWrite() == getFileEntry()->getLastOffset()) {
+ (getFileEntry()->getLength() != 0 &&
+ segment->getPositionToWrite() == getFileEntry()->getLastOffset())) {
segmentPartComplete = true;
} else if(segment->getLength() == 0 && eof) {
segmentPartComplete = true;
@@ -275,13 +277,17 @@ bool DownloadCommand::executeInternal() {
return prepareForNextSegment();
} else {
checkLowestDownloadSpeed();
- setWriteCheckSocketIf(getSocket(), getSocket()->wantWrite());
+ setWriteCheckSocketIf(getSocket(), shouldEnableWriteCheck());
checkSocketRecvBuffer();
addCommandSelf();
return false;
}
}
+bool DownloadCommand::shouldEnableWriteCheck() {
+ return getSocket()->wantWrite();
+}
+
void DownloadCommand::checkLowestDownloadSpeed() const
{
if(lowestDownloadSpeedLimit_ > 0 &&