Changeset 2204


Ignore:
Timestamp:
Jun 26, 2007, 8:46:12 PM (15 years ago)
Author:
charles
Message:

sync with r2002's torrent destruction sequence

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/daemon/torrents.c

    r2203 r2204  
    5555{
    5656    int             id;
    57     int             deleting;
    5857    uint8_t         hash[SHA_DIGEST_LENGTH];
    5958    tr_torrent_t  * tor;
     
    7675static int          toridcmp   ( struct tor *, struct tor * );
    7776static int          torhashcmp ( struct tor *, struct tor * );
    78 static struct tor * idlookup   ( int, int );
    79 static struct tor * hashlookup ( const uint8_t *, int );
     77static struct tor * idlookup   ( int );
     78static struct tor * hashlookup ( const uint8_t * );
    8079static struct tor * iterate    ( struct tor * );
    8180
     
    184183    assert( !gl_exiting );
    185184
    186     tor = idlookup( id, 0 );
     185    tor = idlookup( id );
    187186    if( NULL == tor )
    188187    {
     
    207206    assert( !gl_exiting );
    208207
    209     tor = idlookup( id, 0 );
     208    tor = idlookup( id );
    210209    if( NULL == tor )
    211210    {
     
    229228    assert( !gl_exiting );
    230229
    231     tor = idlookup( id, 0 );
     230    tor = idlookup( id );
    232231    if( NULL == tor )
    233232    {
     
    247246    assert( !gl_exiting );
    248247
    249     tor = idlookup( id, 0 );
     248    tor = idlookup( id );
    250249    if( NULL == tor )
    251250    {
     
    264263    assert( !gl_exiting );
    265264
    266     tor = idlookup( id, 0 );
     265    tor = idlookup( id );
    267266    if( NULL == tor )
    268267    {
     
    295294    }
    296295
    297     tor = hashlookup( hash, 0 );
     296    tor = hashlookup( hash );
    298297    if( NULL == tor )
    299298    {
     
    566565    gl_lastid++;
    567566    tor->id       = gl_lastid;
    568     tor->deleting = 0;
    569567
    570568    assert( sizeof( inf->hash ) == sizeof( tor->hash ) );
     
    590588}
    591589
     590static void
     591freetor( struct tor * tor )
     592{
     593    tr_torrentClose( tor->tor );
     594    RB_REMOVE( tortree, &gl_tree, tor );
     595    RB_REMOVE( hashtree, &gl_hashes, tor );
     596    free( tor );
     597}
     598
    592599void
    593600closetor( struct tor * tor, int calltimer )
    594601{
    595     tr_stat_t  * st;
    596 
    597     if( NULL == tor || tor->deleting )
    598     {
    599         return;
    600     }
    601     tor->deleting = 1;
    602 
    603     st = tr_torrentStat( tor->tor );
    604     if( TR_STATUS_ACTIVE & st->status )
    605     {
    606         tr_torrentStop( tor->tor );
    607     }
    608 
    609     starttimer( calltimer );
     602    if( NULL != tor )
     603    {
     604        freetor( tor );
     605
     606        starttimer( calltimer );
     607    }
    610608}
    611609
     
    625623}
    626624
    627 void
     625static void
    628626timerfunc( int fd UNUSED, short event UNUSED, void * arg UNUSED )
    629627{
    630628    struct tor         * tor, * next;
    631629    tr_handle_status_t * hs;
    632     tr_stat_t          * st;
    633630    int                  stillmore;
    634631    struct timeval       tv;
    635632
    636     stillmore = 0;
    637     for( tor = RB_MIN( tortree, &gl_tree ); NULL != tor; tor = next )
    638     {
    639         next = RB_NEXT( tortree, &gl_tree, tor );
    640         if( !tor->deleting )
    641         {
    642             continue;
    643         }
    644         st = tr_torrentStat( tor->tor );
    645         if( TR_STATUS_PAUSE & st->status )
    646         {
    647             tr_torrentClose( tor->tor );
    648             RB_REMOVE( tortree, &gl_tree, tor );
    649             RB_REMOVE( hashtree, &gl_hashes, tor );
    650             free( tor );
    651         }
    652         else
    653         {
    654             stillmore = 1;
    655         }
    656     }
     633    /* true if we've still got live torrents... */
     634    stillmore = tr_torrentCount( gl_handle ) != 0;
    657635
    658636    if( gl_exiting )
     
    676654            {
    677655                next = RB_NEXT( tortree, &gl_tree, tor );
    678                 tr_torrentClose( tor->tor );
    679                 RB_REMOVE( tortree, &gl_tree, tor );
    680                 RB_REMOVE( hashtree, &gl_hashes, tor );
    681                 free( tor );
     656                freetor( tor );
    682657            }
    683658            tr_close( gl_handle );
     
    846821    RB_FOREACH( ii, tortree, &gl_tree )
    847822    {
    848         if( !ii->deleting )
    849         {
    850             len++;
    851         }
     823        len++;
    852824    }
    853825    if( tr_bencListReserve( list, len ) )
     
    858830    RB_FOREACH( ii, tortree, &gl_tree )
    859831    {
    860         if( ii->deleting )
    861         {
    862             continue;
    863         }
    864832        tor = tr_bencListAdd( list );
    865833        assert( NULL != tor );
     
    916884
    917885struct tor *
    918 idlookup( int id, int wantdel )
     886idlookup( int id )
    919887{
    920888    struct tor key, * found;
     
    923891    key.id = id;
    924892    found = RB_FIND( tortree, &gl_tree, &key );
    925     if( NULL != found && !wantdel && found->deleting )
    926     {
    927         found = NULL;
    928     }
    929893
    930894    return found;
     
    932896
    933897struct tor *
    934 hashlookup( const uint8_t * hash, int wantdel )
     898hashlookup( const uint8_t * hash )
    935899{
    936900    struct tor key, * found;
     
    939903    memcpy( key.hash, hash, sizeof key.hash );
    940904    found = RB_FIND( hashtree, &gl_hashes, &key );
    941     if( NULL != found && !wantdel && found->deleting )
    942     {
    943         found = NULL;
    944     }
    945905
    946906    return found;
     
    962922    }
    963923
    964     while( NULL != tor && tor->deleting )
    965     {
    966         tor = RB_NEXT( tortree, &gl_tree, tor );
    967     }
    968 
    969924    return tor;
    970925}
Note: See TracChangeset for help on using the changeset viewer.