{
unsigned int doUnchoke : 1;
unsigned int isInterested : 1;
- double rate;
+ unsigned int isChoked : 1;
+ int rate;
tr_peer * peer;
};
{
const struct ChokeData * a = va;
const struct ChokeData * b = vb;
- int diff = 0;
- if( diff == 0 ) /* prefer higher overall speeds */
- diff = a->rate > b->rate ? -1 : 1;
+ if( a->rate != b->rate ) /* prefer higher overall speeds */
+ return a->rate > b->rate ? -1 : 1;
- if( diff == 0 ) /* prefer unchoked */
- diff = (int)a->peer->peerIsChoked - (int)b->peer->peerIsChoked;
+ if( a->isChoked != b->isChoked ) /* prefer unchoked */
+ return a->isChoked ? 1 : -1;
- return diff;
+ return 0;
}
static int
struct ChokeData * n = &choke[size++];
n->peer = peer;
n->isInterested = peer->peerIsInterested;
- n->rate = tr_peerGetPieceSpeed( peer, TR_CLIENT_TO_PEER )
- + tr_peerGetPieceSpeed( peer, TR_PEER_TO_CLIENT );
+ n->isChoked = peer->peerIsChoked;
+ n->rate = (int)(tr_peerGetPieceSpeed( peer, TR_CLIENT_TO_PEER )
+ + tr_peerGetPieceSpeed( peer, TR_PEER_TO_CLIENT ) );
}
}