diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-08-26 14:49:40 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-08-26 14:49:40 +0000 |
| commit | 835de071f2cc5c65df13753935a38d7fa87ce326 (patch) | |
| tree | e68e86fd70cccc331c7730beca1ad3946ec6d400 /src/DefaultBtInteractive.cc | |
| parent | e396d2e2c44a36eec5b6069403b82615519fb218 (diff) | |
2010-08-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Enter end game mode as soon as all pieces are assigned to peer to
avoid substantial slow down at the very last stage of download.
* src/DefaultBtInteractive.cc
* src/DefaultPieceStorage.cc
* src/DefaultPieceStorage.h
* src/PieceStorage.h
* src/UnknownLengthPieceStorage.h
* test/MockPieceStorage.h
Diffstat (limited to 'src/DefaultBtInteractive.cc')
| -rw-r--r-- | src/DefaultBtInteractive.cc | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/DefaultBtInteractive.cc b/src/DefaultBtInteractive.cc index 783072c5..95c2cccb 100644 --- a/src/DefaultBtInteractive.cc +++ b/src/DefaultBtInteractive.cc @@ -323,7 +323,8 @@ size_t DefaultBtInteractive::receiveMessages() { break; } } - if(countOldOutstandingRequest >= maxOutstandingRequest_ && + if(!pieceStorage_->isEndGame() && + countOldOutstandingRequest >= maxOutstandingRequest_ && dispatcher_->countOutstandingRequest() == 0){ maxOutstandingRequest_ = std::min((size_t)UB_MAX_OUTSTANDING_REQUEST, @@ -394,6 +395,12 @@ void DefaultBtInteractive::fillPiece(size_t maxMissingBlock) { } void DefaultBtInteractive::addRequests() { + if(!pieceStorage_->isEndGame() && !pieceStorage_->hasMissingUnusedPiece()) { + pieceStorage_->enterEndGame(); + } + if(pieceStorage_->isEndGame()) { + maxOutstandingRequest_ = 2; + } fillPiece(maxOutstandingRequest_); size_t reqNumToCreate = maxOutstandingRequest_ <= dispatcher_->countOutstandingRequest() ? @@ -402,6 +409,7 @@ void DefaultBtInteractive::addRequests() { std::vector<SharedHandle<BtMessage> > requests; requests.reserve(reqNumToCreate); if(pieceStorage_->isEndGame()) { + logger_->debug("ENDGAME"); btRequestFactory_->createRequestMessagesOnEndGame(requests,reqNumToCreate); } else { btRequestFactory_->createRequestMessages(requests, reqNumToCreate); |
