diff options
Diffstat (limited to 'src/DownloadCommand.cc')
| -rw-r--r-- | src/DownloadCommand.cc | 10 |
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 && |
