Changeset 3293


Ignore:
Timestamp:
Oct 6, 2007, 1:43:04 AM (15 years ago)
Author:
charles
Message:

fix potential "recheck torrent" deadlock

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/inout.c

    r3284 r3293  
    403403tr_ioRecheckRemove( tr_torrent * tor )
    404404{
    405     tr_lockLock( getRecheckLock( ) );
    406 
    407     if( tor == currentNode.torrent ) {
     405    tr_lock * lock = getRecheckLock( );
     406    tr_lockLock( lock );
     407
     408    if( tor == currentNode.torrent )
     409    {
    408410        stopCurrent = TRUE;
    409411        while( stopCurrent )
    410             tr_wait( 50 );
    411     } else {
     412        {
     413            tr_lockUnlock( lock );
     414            tr_wait( 100 );
     415            tr_lockLock( lock );
     416        }
     417    }
     418    else
     419    {
    412420        struct recheck_node tmp;
    413421        tmp.torrent = tor;
    414         struct recheck_node * node = tr_list_remove( &recheckList, &tmp, compareRecheckByTorrent );
     422        struct recheck_node * node = tr_list_remove( &recheckList,
     423                                                     &tmp,
     424                                                     compareRecheckByTorrent );
    415425        tr_free( node );
    416426        tor->recheckState = TR_RECHECK_NONE;
    417427    }
    418428
    419     tr_lockUnlock( getRecheckLock( ) );
    420 }
     429    tr_lockUnlock( lock );
     430}
Note: See TracChangeset for help on using the changeset viewer.