浏览代码

Don't download piece which is filtered out (e.g., --select-file)

This commit fixes the bug that piece which is not requested by
--select-file is downloaded in multi-file WebSeeding.
Tatsuhiro Tsujikawa 9 年之前
父节点
当前提交
90452ae11b
共有 1 个文件被更改,包括 6 次插入1 次删除
  1. 6 1
      src/DefaultPieceStorage.cc

+ 6 - 1
src/DefaultPieceStorage.cc

@@ -119,6 +119,9 @@ DefaultPieceStorage::~DefaultPieceStorage() = default;
 std::shared_ptr<Piece> DefaultPieceStorage::checkOutPiece(size_t index,
                                                           cuid_t cuid)
 {
+  assert(!bitfieldMan_->isFilterEnabled() ||
+         bitfieldMan_->isFilterBitSet(index));
+
   bitfieldMan_->setUseBit(index);
 
   std::shared_ptr<Piece> piece = findUsedPiece(index);
@@ -398,7 +401,9 @@ DefaultPieceStorage::getMissingPiece(size_t minSplitSize,
 std::shared_ptr<Piece> DefaultPieceStorage::getMissingPiece(size_t index,
                                                             cuid_t cuid)
 {
-  if (hasPiece(index) || isPieceUsed(index)) {
+  if (hasPiece(index) || isPieceUsed(index) ||
+      (bitfieldMan_->isFilterEnabled() &&
+       !bitfieldMan_->isFilterBitSet(index))) {
     return nullptr;
   }
   else {