Bladeren bron

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 jaren geleden
bovenliggende
commit
90452ae11b
1 gewijzigde bestanden met toevoegingen van 6 en 1 verwijderingen
  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 {