summaryrefslogtreecommitdiff
path: root/src/DownloadCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2015-05-12 00:55:12 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2015-05-12 00:55:12 +0900
commit89c1916fa57d87ea09142cc3588044c691d1928f (patch)
treeea35f4171e9e5b85e7336688b6089786a9c6701d /src/DownloadCommand.cc
parent4654f1974a5faa832518ba3875ecb3e77224e656 (diff)
parent2758fba10c79a76e07f7cfb894f5cfcbaff85ff7 (diff)
Merge branch 'sftp'
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 &&