]> granicus.if.org Git - transmission/commitdiff
(libT) fix r7109 oops spotted by BentMyWookie
authorCharles Kerr <charles@transmissionbt.com>
Sat, 15 Nov 2008 01:07:08 +0000 (01:07 +0000)
committerCharles Kerr <charles@transmissionbt.com>
Sat, 15 Nov 2008 01:07:08 +0000 (01:07 +0000)
libtransmission/peer-mgr.c

index 4ed5deb0a4c154594849f2c4e804dcbfd5c57c29..eacec9bb4bfe656ca7d1f533d3bc61fef46f2697 100644 (file)
@@ -1842,7 +1842,8 @@ struct ChokeData
 {
     unsigned int    doUnchoke    : 1;
     unsigned int    isInterested : 1;
-    double          rate;
+    unsigned int    isChoked     : 1;
+    int             rate;
     tr_peer *       peer;
 };
 
@@ -1852,15 +1853,14 @@ compareChoke( const void * va,
 {
     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
@@ -1901,8 +1901,9 @@ rechoke( Torrent * t )
             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 ) );
         }
     }