1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-27 18:18:10 +00:00

(trunk libT) when filtering out peers that aren't candidates, use the fastest filter tests first, so that the more expensive tests will be applied to fewer peers. In particular, call peerIsInUse() last.

This commit is contained in:
Charles Kerr 2010-06-14 11:57:46 +00:00
parent f0a70d77b6
commit 89201ab829

View file

@ -271,10 +271,12 @@ handshakeCompare( const void * a, const void * b )
return handshakeCompareToAddr( a, tr_handshakeGetAddr( b, NULL ) ); return handshakeCompareToAddr( a, tr_handshakeGetAddr( b, NULL ) );
} }
static tr_handshake* static inline tr_handshake*
getExistingHandshake( tr_ptrArray * handshakes, getExistingHandshake( tr_ptrArray * handshakes, const tr_address * addr )
const tr_address * addr )
{ {
if( tr_ptrArrayEmpty( handshakes ) )
return NULL;
return tr_ptrArrayFindSorted( handshakes, addr, handshakeCompareToAddr ); return tr_ptrArrayFindSorted( handshakes, addr, handshakeCompareToAddr );
} }
@ -566,7 +568,7 @@ atomSetSeed( struct peer_atom * atom )
atomSetSeedProbability( atom, 100 ); atomSetSeedProbability( atom, 100 );
} }
static tr_bool static inline tr_bool
atomIsSeed( const struct peer_atom * atom ) atomIsSeed( const struct peer_atom * atom )
{ {
return atom->seedProbability == 100; return atom->seedProbability == 100;
@ -3244,10 +3246,6 @@ isBandwidthMaxedOut( const tr_bandwidth * b,
static tr_bool static tr_bool
isPeerCandidate( const tr_torrent * tor, const struct peer_atom * atom, const time_t now ) isPeerCandidate( const tr_torrent * tor, const struct peer_atom * atom, const time_t now )
{ {
/* not if we've already got a connection to them... */
if( peerIsInUse( tor->torrentPeers, atom ) )
return FALSE;
/* not if they're banned... */ /* not if they're banned... */
if( atom->myflags & MYFLAG_BANNED ) if( atom->myflags & MYFLAG_BANNED )
return FALSE; return FALSE;
@ -3266,6 +3264,10 @@ isPeerCandidate( const tr_torrent * tor, const struct peer_atom * atom, const ti
if( tr_sessionIsAddressBlocked( tor->session, &atom->addr ) ) if( tr_sessionIsAddressBlocked( tor->session, &atom->addr ) )
return FALSE; return FALSE;
/* not if we've already got a connection to them... */
if( peerIsInUse( tor->torrentPeers, atom ) )
return FALSE;
return TRUE; return TRUE;
} }
@ -3342,8 +3344,8 @@ comparePeerCandidates( const void * va, const void * vb )
const struct peer_candidate * a = va; const struct peer_candidate * a = va;
const struct peer_candidate * b = vb; const struct peer_candidate * b = vb;
if( a->score != b->score ) if( a->score < b->score ) return -1;
return a->score < b->score ? -1 : 1; if( a->score > b->score ) return 1;
return 0; return 0;
} }