Changeset 6175


Ignore:
Timestamp:
Jun 13, 2008, 4:44:16 PM (13 years ago)
Author:
charles
Message:

(1.2x) backport the two unchoke fixes from #980 and #988

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/1.2x/libtransmission/peer-mgr.c

    r5764 r6175  
    15751575rechoke( Torrent * t )
    15761576{
    1577     int i, n, peerCount, size, unchokedInterested;
     1577    int i, peerCount, size, unchokedInterested;
    15781578    tr_peer ** peers = getConnectedPeers( t, &peerCount );
    15791579    struct ChokeData * choke = tr_new0( struct ChokeData, peerCount );
     
    16171617            ++unchokedInterested;
    16181618    }
    1619     n = i;
    1620     while( i<size )
    1621         choke[i++].doUnchoke = 0;
    16221619
    16231620    /* optimistic unchoke */
    16241621    if( i < size )
    16251622    {
     1623        int n;
    16261624        struct ChokeData * c;
    16271625        tr_ptrArray * randPool = tr_ptrArrayNew( );
     1626
    16281627        for( ; i<size; ++i )
    16291628        {
    1630             const tr_peer * peer = choke[i].peer;
    1631             int x=1, y;
    1632             if( isNew( peer ) ) x *= 3;
    1633             if( isSame( peer ) ) x *= 3;
    1634             for( y=0; y<x; ++y )
    1635                 tr_ptrArrayAppend( randPool, choke );
    1636         }
    1637         i = tr_rand( tr_ptrArraySize( randPool ) );
    1638         c = ( struct ChokeData* )tr_ptrArrayNth( randPool, i);
    1639         c->doUnchoke = 1;
    1640         t->optimistic = c->peer;
     1629            if( choke[i].isInterested )
     1630            {
     1631                const tr_peer * peer = choke[i].peer;
     1632                int x=1, y;
     1633                if( isNew( peer ) ) x *= 3;
     1634                if( isSame( peer ) ) x *= 3;
     1635                for( y=0; y<x; ++y )
     1636                    tr_ptrArrayAppend( randPool, choke );
     1637            }
     1638        }
     1639
     1640        if(( n = tr_ptrArraySize( randPool )))
     1641        {
     1642            c = tr_ptrArrayNth( randPool, tr_rand( n ));
     1643            c->doUnchoke = 1;
     1644            t->optimistic = c->peer;
     1645        }
     1646
    16411647        tr_ptrArrayFree( randPool, NULL );
    16421648    }
Note: See TracChangeset for help on using the changeset viewer.