diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-06-21 14:02:51 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-06-21 14:02:51 +0000 |
| commit | 427577eed473b1880fdb2263be4cdad1eaaabfce (patch) | |
| tree | 894817f1626378f3595ac62518a6301637fd6241 /src/DownloadCommand.cc | |
| parent | ca4940622c05e50a50f77c621ade914029663446 (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.cc | 10 |
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); |
