From 90452ae11b51cb7c7e411a939f81f2d455bac59a Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 26 Oct 2016 22:40:00 +0900 Subject: [PATCH] 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. --- src/DefaultPieceStorage.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/DefaultPieceStorage.cc b/src/DefaultPieceStorage.cc index 7e94ebc6..456058a5 100644 --- a/src/DefaultPieceStorage.cc +++ b/src/DefaultPieceStorage.cc @@ -119,6 +119,9 @@ DefaultPieceStorage::~DefaultPieceStorage() = default; std::shared_ptr DefaultPieceStorage::checkOutPiece(size_t index, cuid_t cuid) { + assert(!bitfieldMan_->isFilterEnabled() || + bitfieldMan_->isFilterBitSet(index)); + bitfieldMan_->setUseBit(index); std::shared_ptr piece = findUsedPiece(index); @@ -398,7 +401,9 @@ DefaultPieceStorage::getMissingPiece(size_t minSplitSize, std::shared_ptr 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 {