Changeset 7874


Ignore:
Timestamp:
Feb 11, 2009, 4:34:35 PM (12 years ago)
Author:
charles
Message:

(trunk libT) partial revert of r7825: back out the refillPulse() changes

Location:
trunk/libtransmission
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/peer-common.h

    r7824 r7874  
    4848    TR_PEER_ERROR,
    4949    TR_PEER_CANCEL,
    50     TR_PEER_UPLOAD_ONLY
     50    TR_PEER_UPLOAD_ONLY,
     51    TR_PEER_NEED_REQ
    5152}
    5253PeerEventType;
  • trunk/libtransmission/peer-mgr.c

    r7824 r7874  
     1
    12/*
    23 * This file Copyright (C) 2007-2009 Charles Kerr <charles@transmissionbt.com>
     
    127128    tr_ptrArray     peers; /* tr_peer */
    128129    tr_ptrArray     webseeds; /* tr_webseed */
     130    tr_timer *      refillTimer;
    129131    tr_torrent *    tor;
    130132    tr_peer *       optimistic; /* the optimistic peer, or NULL if none */
     
    140142    tr_timer        * bandwidthTimer;
    141143    tr_timer        * rechokeTimer;
    142     tr_timer        * refillTimer;
    143144    tr_timer        * reconnectTimer;
    144145};
     
    380381
    381382    memcpy( hash, t->hash, SHA_DIGEST_LENGTH );
     383
     384    tr_timerFree( &t->refillTimer );
    382385
    383386    tr_ptrArrayDestruct( &t->webseeds, (PtrArrayForeachFunc)tr_webseedFree );
     
    423426static int bandwidthPulse ( void * vmgr );
    424427static int rechokePulse   ( void * vmgr );
    425 static int refillPulse    ( void * vmgr );
    426428static int reconnectPulse ( void * vmgr );
    427429
     
    435437    m->bandwidthTimer = tr_timerNew( session, bandwidthPulse, m, BANDWIDTH_PERIOD_MSEC );
    436438    m->rechokeTimer   = tr_timerNew( session, rechokePulse,   m, RECHOKE_PERIOD_MSEC );
    437     m->refillTimer    = tr_timerNew( session, refillPulse,    m, REFILL_PERIOD_MSEC );
    438439    m->reconnectTimer = tr_timerNew( session, reconnectPulse, m, RECONNECT_PERIOD_MSEC );
    439440
     
    449450
    450451    tr_timerFree( &manager->reconnectTimer );
    451     tr_timerFree( &manager->refillTimer );
    452452    tr_timerFree( &manager->rechokeTimer );
    453453    tr_timerFree( &manager->bandwidthTimer );
     
    735735}
    736736
    737 static void
    738 refillTorrent( Torrent * t )
     737static int
     738refillPulse( void * vtorrent )
    739739{
    740740    tr_block_index_t block;
     
    744744    tr_webseed ** webseeds;
    745745    struct tr_blockIterator * blockIterator;
     746    Torrent * t = vtorrent;
    746747    tr_torrent * tor = t->tor;
    747748
    748749    if( !t->isRunning )
    749         return;
     750        return TRUE;
    750751    if( tr_torrentIsSeed( t->tor ) )
    751         return;
    752 
     752        return TRUE;
     753
     754    torrentLock( t );
    753755    tordbg( t, "Refilling Request Buffers..." );
    754756
     
    822824    tr_free( webseeds );
    823825    tr_free( peers );
    824 }
    825 
    826 static int
    827 refillPulse( void * vmgr )
    828 {
    829     tr_torrent * tor = NULL;
    830     tr_peerMgr * mgr = vmgr;
    831     managerLock( mgr );
    832 
    833     while(( tor = tr_torrentNext( mgr->session, tor )))
    834         if( tor->isRunning && !tr_torrentIsSeed( tor ) )
    835             refillTorrent( tor->torrentPeers );
    836 
    837     managerUnlock( mgr );
    838     return TRUE;
     826
     827    t->refillTimer = NULL;
     828    torrentUnlock( t );
     829    return FALSE;
    839830}
    840831
     
    883874    tor->corruptCur += byteCount;
    884875    tor->downloadedCur -= MIN( tor->downloadedCur, byteCount );
     876}
     877
     878static void
     879refillSoon( Torrent * t )
     880{
     881    if( t->refillTimer == NULL )
     882        t->refillTimer = tr_timerNew( t->manager->session,
     883                                      refillPulse, t,
     884                                      REFILL_PERIOD_MSEC );
    885885}
    886886
     
    950950                a->uploadOnly = e->uploadOnly ? UPLOAD_ONLY_YES : UPLOAD_ONLY_NO;
    951951            }
     952            break;
     953
     954        case TR_PEER_NEED_REQ:
     955            refillSoon( t );
    952956            break;
    953957
     
    15131517tr_peerMgrStartTorrent( tr_torrent * tor )
    15141518{
    1515     tor->torrentPeers->isRunning = TRUE;
     1519    Torrent * t = tor->torrentPeers;
     1520
     1521    managerLock( t->manager );
     1522
     1523    assert( t );
     1524
     1525    if( !t->isRunning )
     1526    {
     1527        t->isRunning = TRUE;
     1528
     1529        if( !tr_ptrArrayEmpty( &t->webseeds ) )
     1530            refillSoon( t );
     1531    }
     1532
     1533    managerUnlock( t->manager );
    15161534}
    15171535
  • trunk/libtransmission/peer-msgs.c

    r7824 r7874  
    421421
    422422static void
     423fireNeedReq( tr_peermsgs * msgs )
     424{
     425    tr_peer_event e = blankEvent;
     426    e.eventType = TR_PEER_NEED_REQ;
     427    publish( msgs, &e );
     428}
     429
     430static void
    423431firePeerProgress( tr_peermsgs * msgs )
    424432{
     
    646654    if( i != msgs->peer->clientIsInterested )
    647655        sendInterest( msgs, i );
     656    if( i )
     657        fireNeedReq( msgs );
    648658}
    649659
     
    810820        dbgmsg( msgs, "pump sent %d requests, now have %d active and %d queued",
    811821                sent, msgs->clientAskedFor.len, msgs->clientWillAskFor.len );
     822
     823    if( len < max )
     824        fireNeedReq( msgs );
    812825}
    813826
     
    13541367            dbgmsg( msgs, "got Unchoke" );
    13551368            msgs->peer->clientIsChoked = 0;
     1369            fireNeedReq( msgs );
    13561370            break;
    13571371
     
    13791393
    13801394        case BT_BITFIELD:
     1395        {
    13811396            dbgmsg( msgs, "got a bitfield" );
    13821397            tr_peerIoReadBytes( msgs->peer->io, inbuf, msgs->peer->have->bits, msglen );
    13831398            updatePeerProgress( msgs );
     1399            fireNeedReq( msgs );
    13841400            break;
     1401        }
    13851402
    13861403        case BT_REQUEST:
  • trunk/libtransmission/webseed.c

    r7824 r7874  
    6060    if( w->callback )
    6161        w->callback( NULL, e, w->callback_userdata );
     62}
     63
     64static void
     65fireNeedReq( tr_webseed * w )
     66{
     67    tr_peer_event e = blankEvent;
     68    e.eventType = TR_PEER_NEED_REQ;
     69    publish( w, &e );
    6270}
    6371
     
    173181            if( w->dead )
    174182                tr_webseedFree( w );
    175             else
     183            else  {
    176184                fireClientGotBlock( w, w->pieceIndex, w->pieceOffset, w->byteCount );
     185                fireNeedReq( w );
     186            }
    177187        }
    178188    }
Note: See TracChangeset for help on using the changeset viewer.