mirror of
https://github.com/transmission/transmission
synced 2025-02-06 06:24:31 +00:00
roll back a bug introduced in r3265
This commit is contained in:
parent
84ab0092fb
commit
af686b3297
1 changed files with 55 additions and 11 deletions
|
@ -462,6 +462,26 @@ tr_peerMgrFree( tr_peerMgr * manager )
|
||||||
tr_free( manager );
|
tr_free( manager );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static tr_peer**
|
||||||
|
getConnectedPeers( Torrent * t, int * setmeCount )
|
||||||
|
{
|
||||||
|
int i, peerCount, connectionCount;
|
||||||
|
tr_peer **peers;
|
||||||
|
tr_peer **ret;
|
||||||
|
|
||||||
|
assert( torrentIsLocked( t ) );
|
||||||
|
|
||||||
|
peers = (tr_peer **) tr_ptrArrayPeek( t->peers, &peerCount );
|
||||||
|
ret = tr_new( tr_peer*, peerCount );
|
||||||
|
|
||||||
|
for( i=connectionCount=0; i<peerCount; ++i )
|
||||||
|
if( peers[i]->msgs != NULL )
|
||||||
|
ret[connectionCount++] = peers[i];
|
||||||
|
|
||||||
|
*setmeCount = connectionCount;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
**** Refill
|
**** Refill
|
||||||
***/
|
***/
|
||||||
|
@ -524,7 +544,7 @@ getPreferredPieces( Torrent * t,
|
||||||
|
|
||||||
assert( torrentIsLocked( t ) );
|
assert( torrentIsLocked( t ) );
|
||||||
|
|
||||||
peers = (tr_peer**) tr_ptrArrayPeek( t->peers, &peerCount );
|
peers = getConnectedPeers( t, &peerCount );
|
||||||
|
|
||||||
for( i=0; i<inf->pieceCount; ++i )
|
for( i=0; i<inf->pieceCount; ++i )
|
||||||
if( isPieceInteresting( tor, i ) )
|
if( isPieceInteresting( tor, i ) )
|
||||||
|
@ -570,6 +590,7 @@ fprintf (stderr, "new pool: ");
|
||||||
for (i=0; i<15 && i<(int)poolSize; ++i ) fprintf (stderr, "%d, ", (int)pool[i] );
|
for (i=0; i<15 && i<(int)poolSize; ++i ) fprintf (stderr, "%d, ", (int)pool[i] );
|
||||||
fprintf (stderr, "\n");
|
fprintf (stderr, "\n");
|
||||||
#endif
|
#endif
|
||||||
|
tr_free( peers );
|
||||||
|
|
||||||
*pieceCount = poolSize;
|
*pieceCount = poolSize;
|
||||||
return pool;
|
return pool;
|
||||||
|
@ -644,7 +665,7 @@ refillPulse( void * vtorrent )
|
||||||
torrentLock( t );
|
torrentLock( t );
|
||||||
|
|
||||||
blocks = getPreferredBlocks( t, &blockCount );
|
blocks = getPreferredBlocks( t, &blockCount );
|
||||||
peers = (tr_peer**) tr_ptrArrayPeek( t->peers, &peerCount );
|
peers = getConnectedPeers( t, &peerCount );
|
||||||
|
|
||||||
/*fprintf( stderr, "REFILL refillPulse for {%s} got %d blocks\n", tor->info.name, (int)blockCount );*/
|
/*fprintf( stderr, "REFILL refillPulse for {%s} got %d blocks\n", tor->info.name, (int)blockCount );*/
|
||||||
|
|
||||||
|
@ -676,6 +697,7 @@ refillPulse( void * vtorrent )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TR_ADDREQ_OK:
|
case TR_ADDREQ_OK:
|
||||||
|
/*fprintf( stderr, "REFILL peer %p took the request for block %d\n", peers[j]->msgs, block );*/
|
||||||
tr_bitfieldAdd( t->requested, block );
|
tr_bitfieldAdd( t->requested, block );
|
||||||
j = peerCount;
|
j = peerCount;
|
||||||
break;
|
break;
|
||||||
|
@ -688,6 +710,7 @@ refillPulse( void * vtorrent )
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cleanup */
|
/* cleanup */
|
||||||
|
tr_free( peers );
|
||||||
tr_free( blocks );
|
tr_free( blocks );
|
||||||
|
|
||||||
t->refillTimer = NULL;
|
t->refillTimer = NULL;
|
||||||
|
@ -704,9 +727,10 @@ broadcastClientHave( Torrent * t, uint32_t index )
|
||||||
|
|
||||||
assert( torrentIsLocked( t ) );
|
assert( torrentIsLocked( t ) );
|
||||||
|
|
||||||
peers = (tr_peer**) tr_ptrArrayPeek( t->peers, &size );
|
peers = getConnectedPeers( t, &size );
|
||||||
for( i=0; i<size; ++i )
|
for( i=0; i<size; ++i )
|
||||||
tr_peerMsgsHave( peers[i]->msgs, index );
|
tr_peerMsgsHave( peers[i]->msgs, index );
|
||||||
|
tr_free( peers );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -717,9 +741,10 @@ broadcastGotBlock( Torrent * t, uint32_t index, uint32_t offset, uint32_t length
|
||||||
|
|
||||||
assert( torrentIsLocked( t ) );
|
assert( torrentIsLocked( t ) );
|
||||||
|
|
||||||
peers = (tr_peer**) tr_ptrArrayPeek( t->peers, &size );
|
peers = getConnectedPeers( t, &size );
|
||||||
for( i=0; i<size; ++i )
|
for( i=0; i<size; ++i )
|
||||||
tr_peerMsgsCancel( peers[i]->msgs, index, offset, length );
|
tr_peerMsgsCancel( peers[i]->msgs, index, offset, length );
|
||||||
|
tr_free( peers );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1010,11 +1035,17 @@ tr_peerMgrSetBlame( tr_peerMgr * manager UNUSED,
|
||||||
int
|
int
|
||||||
tr_pexCompare( const void * va, const void * vb )
|
tr_pexCompare( const void * va, const void * vb )
|
||||||
{
|
{
|
||||||
const tr_pex * a = va;
|
const tr_pex * a = (const tr_pex *) va;
|
||||||
const tr_pex * b = vb;
|
const tr_pex * b = (const tr_pex *) vb;
|
||||||
return memcmp( &a->in_addr, &b->in_addr, sizeof(struct in_addr) );
|
int i = memcmp( &a->in_addr, &b->in_addr, sizeof(struct in_addr) );
|
||||||
|
if( i ) return i;
|
||||||
|
if( a->port < b->port ) return -1;
|
||||||
|
if( a->port > b->port ) return 1;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int tr_pexCompare( const void * a, const void * b );
|
||||||
|
|
||||||
static int
|
static int
|
||||||
peerPrefersCrypto( const tr_peer * peer )
|
peerPrefersCrypto( const tr_peer * peer )
|
||||||
{
|
{
|
||||||
|
@ -1084,12 +1115,20 @@ tr_peerMgrStartTorrent( tr_peerMgr * manager,
|
||||||
static void
|
static void
|
||||||
stopTorrent( Torrent * t )
|
stopTorrent( Torrent * t )
|
||||||
{
|
{
|
||||||
|
int i, size;
|
||||||
|
tr_peer ** peers;
|
||||||
|
|
||||||
assert( torrentIsLocked( t ) );
|
assert( torrentIsLocked( t ) );
|
||||||
|
|
||||||
t->isRunning = 0;
|
t->isRunning = 0;
|
||||||
tr_timerFree( &t->rechokeTimer );
|
tr_timerFree( &t->rechokeTimer );
|
||||||
tr_timerFree( &t->reconnectTimer );
|
tr_timerFree( &t->reconnectTimer );
|
||||||
removeAllPeers( t );
|
|
||||||
|
peers = getConnectedPeers( t, &size );
|
||||||
|
for( i=0; i<size; ++i )
|
||||||
|
disconnectPeer( peers[i] );
|
||||||
|
|
||||||
|
tr_free( peers );
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
tr_peerMgrStopTorrent( tr_peerMgr * manager,
|
tr_peerMgrStopTorrent( tr_peerMgr * manager,
|
||||||
|
@ -1348,7 +1387,7 @@ rechokeLeech( Torrent * t )
|
||||||
{
|
{
|
||||||
int i, peerCount, size=0, unchoked=0;
|
int i, peerCount, size=0, unchoked=0;
|
||||||
const time_t ignorePeersNewerThan = time(NULL) - MIN_CHOKE_PERIOD_SEC;
|
const time_t ignorePeersNewerThan = time(NULL) - MIN_CHOKE_PERIOD_SEC;
|
||||||
tr_peer ** peers = (tr_peer**) tr_ptrArrayPeek( t->peers, &peerCount );
|
tr_peer ** peers = getConnectedPeers( t, &peerCount );
|
||||||
ChokeData * choke = tr_new0( ChokeData, peerCount );
|
ChokeData * choke = tr_new0( ChokeData, peerCount );
|
||||||
|
|
||||||
assert( torrentIsLocked( t ) );
|
assert( torrentIsLocked( t ) );
|
||||||
|
@ -1388,6 +1427,7 @@ rechokeLeech( Torrent * t )
|
||||||
|
|
||||||
/* cleanup */
|
/* cleanup */
|
||||||
tr_free( choke );
|
tr_free( choke );
|
||||||
|
tr_free( peers );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1398,9 +1438,13 @@ rechokeSeed( Torrent * t )
|
||||||
|
|
||||||
assert( torrentIsLocked( t ) );
|
assert( torrentIsLocked( t ) );
|
||||||
|
|
||||||
peers = (tr_peer**) tr_ptrArrayPeek( t->peers, &size );
|
peers = getConnectedPeers( t, &size );
|
||||||
|
|
||||||
|
/* FIXME */
|
||||||
for( i=0; i<size; ++i )
|
for( i=0; i<size; ++i )
|
||||||
tr_peerMsgsSetChoke( peers[i]->msgs, FALSE );
|
tr_peerMsgsSetChoke( peers[i]->msgs, FALSE );
|
||||||
|
|
||||||
|
tr_free( peers );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1467,7 +1511,7 @@ getWeakConnections( Torrent * t, int * setmeSize )
|
||||||
|
|
||||||
if( peer->doPurge )
|
if( peer->doPurge )
|
||||||
isWeak = TRUE;
|
isWeak = TRUE;
|
||||||
if( peerIsSeed && clientIsSeed && (now-atom->time >= 20) ) /* pex time */
|
if( peerIsSeed && clientIsSeed && (now-atom->time >= 30) ) /* pex time */
|
||||||
isWeak = TRUE;
|
isWeak = TRUE;
|
||||||
else if( ( now - atom->time ) < LAISSEZ_FAIRE_PERIOD_SECS )
|
else if( ( now - atom->time ) < LAISSEZ_FAIRE_PERIOD_SECS )
|
||||||
isWeak = FALSE;
|
isWeak = FALSE;
|
||||||
|
|
Loading…
Reference in a new issue