diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-04-23 23:00:11 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-04-23 23:00:11 +0900 |
| commit | b05454657f6e13abee94f74af3ce42c34ffb4fe2 (patch) | |
| tree | ae91e2a2d233e1d45059c9630522b9fa9eb1f5ad | |
| parent | 9665a3491d8916ead0904491c559afe63fe08ad7 (diff) | |
Fix cached data is not flushed when downloaded data is less than 16KiB
| -rw-r--r-- | src/SegmentMan.cc | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/SegmentMan.cc b/src/SegmentMan.cc index 775615a8..e2c8947f 100644 --- a/src/SegmentMan.cc +++ b/src/SegmentMan.cc @@ -282,14 +282,8 @@ void SegmentMan::cancelSegmentInternal A2_LOG_DEBUG(fmt("Canceling segment#%lu", static_cast<unsigned long>(segment->getIndex()))); const SharedHandle<Piece>& piece = segment->getPiece(); - piece->setUsedBySegment(false); - pieceStorage_->cancelPiece(piece, cuid); - segmentWrittenLengthMemo_[segment->getIndex()] = segment->getWrittenLength(); - A2_LOG_DEBUG(fmt("Memorized segment index=%lu, writtenLength=%d", - static_cast<unsigned long>(segment->getIndex()), - segment->getWrittenLength())); // TODO In PieceStorage::cancelPiece(), WrDiskCacheEntry may be - // released. + // released. Flush first. if(piece->getWrDiskCacheEntry()) { // Flush cached data here, because the cached data may be overlapped // if BT peers are involved. @@ -300,6 +294,12 @@ void SegmentMan::cancelSegmentInternal // TODO Exception may cause some segments (pieces) are not // canceled. } + piece->setUsedBySegment(false); + pieceStorage_->cancelPiece(piece, cuid); + segmentWrittenLengthMemo_[segment->getIndex()] = segment->getWrittenLength(); + A2_LOG_DEBUG(fmt("Memorized segment index=%lu, writtenLength=%d", + static_cast<unsigned long>(segment->getIndex()), + segment->getWrittenLength())); } void SegmentMan::cancelSegment(cuid_t cuid) { |
