summaryrefslogtreecommitdiff
path: root/src/DefaultPeerStorage.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-06-02 22:13:47 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-06-02 22:13:47 +0900
commit482cf6aca45bdc8733c88db24058eca59143f923 (patch)
treeafd3f0641fe38dfe5ad4b63cee43803cd341a661 /src/DefaultPeerStorage.cc
parenta0706f5a44ccc171e5b861e4649a7ba861a218b3 (diff)
Fasten seed/download on fast connection
Diffstat (limited to 'src/DefaultPeerStorage.cc')
-rw-r--r--src/DefaultPeerStorage.cc18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/DefaultPeerStorage.cc b/src/DefaultPeerStorage.cc
index 60e13a72..6047462a 100644
--- a/src/DefaultPeerStorage.cc
+++ b/src/DefaultPeerStorage.cc
@@ -62,7 +62,8 @@ DefaultPeerStorage::DefaultPeerStorage()
: maxPeerListSize_(MAX_PEER_LIST_SIZE),
seederStateChoke_(make_unique<BtSeederStateChoke>()),
leecherStateChoke_(make_unique<BtLeecherStateChoke>()),
- lastTransferStatMapUpdated_(Timer::zero())
+ lastTransferStatMapUpdated_(Timer::zero()),
+ forceChokeRound_(false)
{
}
@@ -284,16 +285,21 @@ void DefaultPeerStorage::returnPeer(const std::shared_ptr<Peer>& peer)
bool DefaultPeerStorage::chokeRoundIntervalElapsed()
{
constexpr auto CHOKE_ROUND_INTERVAL = 10_s;
+ auto forceChokeRound = forceChokeRound_;
+ forceChokeRound_ = false;
+
if (pieceStorage_->downloadFinished()) {
+ auto interval = forceChokeRound ? 1_s : CHOKE_ROUND_INTERVAL;
return seederStateChoke_->getLastRound().difference(global::wallclock()) >=
- CHOKE_ROUND_INTERVAL;
- }
- else {
- return leecherStateChoke_->getLastRound().difference(global::wallclock()) >=
- CHOKE_ROUND_INTERVAL;
+ interval;
}
+
+ return leecherStateChoke_->getLastRound().difference(global::wallclock()) >=
+ CHOKE_ROUND_INTERVAL;
}
+void DefaultPeerStorage::scheduleForcedChokeRound() { forceChokeRound_ = true; }
+
void DefaultPeerStorage::executeChoke()
{
if (pieceStorage_->downloadFinished()) {