|  | @@ -288,26 +288,32 @@ void DefaultBtInteractive::decideInterest() {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void DefaultBtInteractive::fillPiece(size_t maxPieceNum) {
 | 
	
		
			
				|  |  | +void DefaultBtInteractive::fillPiece(size_t maxMissingBlock) {
 | 
	
		
			
				|  |  |    if(pieceStorage->hasMissingPiece(peer)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    size_t numMissingBlock = btRequestFactory->countMissingBlock();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      if(peer->peerChoking()) {
 | 
	
		
			
				|  |  |        if(peer->isFastExtensionEnabled()) {
 | 
	
		
			
				|  |  | -	while(btRequestFactory->countTargetPiece() < maxPieceNum) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	while(numMissingBlock < maxMissingBlock) {
 | 
	
		
			
				|  |  |  	  PieceHandle piece = pieceStorage->getMissingFastPiece(peer);
 | 
	
		
			
				|  |  |  	  if(piece.isNull()) {
 | 
	
		
			
				|  |  |  	    break;
 | 
	
		
			
				|  |  |  	  } else {
 | 
	
		
			
				|  |  |  	    btRequestFactory->addTargetPiece(piece);
 | 
	
		
			
				|  |  | +	    numMissingBlock += piece->countMissingBlock();
 | 
	
		
			
				|  |  |  	  }
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  | -      while(btRequestFactory->countTargetPiece() < maxPieceNum) {
 | 
	
		
			
				|  |  | +      while(numMissingBlock < maxMissingBlock) {
 | 
	
		
			
				|  |  |  	PieceHandle piece = pieceStorage->getMissingPiece(peer);
 | 
	
		
			
				|  |  |  	if(piece.isNull()) {
 | 
	
		
			
				|  |  |  	  break;
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  |  	  btRequestFactory->addTargetPiece(piece);
 | 
	
		
			
				|  |  | +	  numMissingBlock += piece->countMissingBlock();
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -323,14 +329,7 @@ void DefaultBtInteractive::addRequests() {
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      MAX_PENDING_REQUEST = 6;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  size_t pieceNum;
 | 
	
		
			
				|  |  | -  if(pieceStorage->isEndGame()) {
 | 
	
		
			
				|  |  | -    pieceNum = 1;
 | 
	
		
			
				|  |  | -  } else {
 | 
	
		
			
				|  |  | -    size_t blocks = DIV_FLOOR(btContext->getPieceLength(), Piece::BLOCK_LENGTH);
 | 
	
		
			
				|  |  | -    pieceNum = DIV_FLOOR(MAX_PENDING_REQUEST, blocks);
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  fillPiece(pieceNum);
 | 
	
		
			
				|  |  | +  fillPiece(MAX_PENDING_REQUEST);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    size_t reqNumToCreate =
 | 
	
		
			
				|  |  |      MAX_PENDING_REQUEST <= dispatcher->countOutstandingRequest() ?
 |