1
0
Fork 0
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:
Charles Kerr 2009-08-18 01:57:17 +00:00
parent 77ec5c12f2
commit 6dedb0433b

View file

@ -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 );