mirror of
https://github.com/transmission/transmission
synced 2025-03-15 16:29:34 +00:00
(trunk libT) better throttling back of outgoing download requests when speed limits are turned on
This commit is contained in:
parent
77ec5c12f2
commit
6dedb0433b
1 changed files with 16 additions and 4 deletions
|
@ -1673,12 +1673,24 @@ canRead( tr_peerIo * io, void * vmsgs, size_t * piece )
|
|||
static int
|
||||
ratePulse( tr_peermsgs * msgs, uint64_t now )
|
||||
{
|
||||
const double rateToClient = tr_peerGetPieceSpeed( msgs->peer, now, TR_PEER_TO_CLIENT );
|
||||
const int seconds = 10;
|
||||
int irate;
|
||||
const int floor = 8;
|
||||
const int estimatedBlocksInPeriod = ( rateToClient * seconds * 1024 ) / msgs->torrent->blockSize;
|
||||
const int seconds = 10;
|
||||
double rate;
|
||||
int estimatedBlocksInPeriod;
|
||||
const tr_torrent * const torrent = msgs->torrent;
|
||||
|
||||
msgs->maxActiveRequests = floor + estimatedBlocksInPeriod;
|
||||
/* Get the rate limit we should use.
|
||||
* FIXME: this needs to consider all the other peers as well... */
|
||||
rate = tr_peerGetPieceSpeed( msgs->peer, now, TR_PEER_TO_CLIENT );
|
||||
if( tr_torrentUsesSpeedLimit( torrent, TR_PEER_TO_CLIENT ) )
|
||||
rate = MIN( rate, tr_torrentGetSpeedLimit( torrent, TR_PEER_TO_CLIENT ) );
|
||||
if( tr_torrentUsesSessionLimits( torrent ) )
|
||||
if( tr_sessionGetActiveSpeedLimit( torrent->session, TR_PEER_TO_CLIENT, &irate ) )
|
||||
rate = MIN( rate, irate );
|
||||
|
||||
estimatedBlocksInPeriod = ( rate * seconds * 1024 ) / torrent->blockSize;
|
||||
msgs->maxActiveRequests = MAX( floor, estimatedBlocksInPeriod );
|
||||
|
||||
if( msgs->reqq > 0 )
|
||||
msgs->maxActiveRequests = MIN( msgs->maxActiveRequests, msgs->reqq );
|
||||
|
|
Loading…
Add table
Reference in a new issue