summaryrefslogtreecommitdiff
path: root/src/DownloadCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-06-21 14:02:51 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-06-21 14:02:51 +0000
commit427577eed473b1880fdb2263be4cdad1eaaabfce (patch)
tree894817f1626378f3595ac62518a6301637fd6241 /src/DownloadCommand.cc
parentca4940622c05e50a50f77c621ade914029663446 (diff)
2010-06-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that corrups file if segment returned from SegmetnMan::getCleanSegmentIfOwnerIsIdle() has writtenLength > 0. * src/DownloadCommand.cc * src/SegmentMan.cc * src/SegmentMan.h * test/SegmentManTest.cc
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 122cf26a..1bba9d04 100644
--- a/src/DownloadCommand.cc
+++ b/src/DownloadCommand.cc
@@ -315,10 +315,16 @@ bool DownloadCommand::prepareForNextSegment() {
if(!tempSegment->complete()) {
return prepareForRetry(0);
}
- SharedHandle<Segment> nextSegment =
- getSegmentMan()->getCleanSegmentIfOwnerIsIdle
+ SharedHandle<Segment> nextSegment = getSegmentMan()->getSegment
(getCuid(), tempSegment->getIndex()+1);
if(nextSegment.isNull()) {
+ nextSegment = getSegmentMan()->getCleanSegmentIfOwnerIsIdle
+ (getCuid(), tempSegment->getIndex()+1);
+ }
+ if(nextSegment.isNull() || nextSegment->getWrittenLength() > 0) {
+ // If nextSegment->getWrittenLength() > 0, current socket must
+ // be closed because writing incoming data at
+ // nextSegment->getWrittenLength() corrupts file.
return prepareForRetry(0);
} else {
getDownloadEngine()->addCommand(this);