diff --git a/libtransmission/internal.h b/libtransmission/internal.h index 4ba11c121..410a633f3 100644 --- a/libtransmission/internal.h +++ b/libtransmission/internal.h @@ -115,7 +115,6 @@ struct tr_torrent int error; char errorString[128]; - int hasChangedState; uint8_t obfuscatedHash[SHA_DIGEST_LENGTH]; @@ -136,18 +135,14 @@ struct tr_torrent struct tr_completion * completion; - volatile char dieFlag; struct tr_bitfield * uncheckedPieces; run_status_t runStatus; run_status_t runStatusToSave; - char runStatusToSaveIsSet; cp_status_t cpStatus; struct tr_lock * lock; struct tr_tracker * tracker; struct tr_publisher_tag * trackerSubscription; - uint64_t startDate; - uint64_t stopDate; uint64_t downloadedCur; uint64_t downloadedPrev; @@ -155,11 +150,17 @@ struct tr_torrent uint64_t uploadedPrev; uint64_t corruptCur; uint64_t corruptPrev; + + uint64_t startDate; + uint64_t stopDate; uint64_t activityDate; - uint8_t pexDisabled; + unsigned int runStatusToSaveIsSet : 1; + unsigned int hasChangedState : 1; + unsigned int pexDisabled : 1; + unsigned int doStopAfterHashCheck : 1; + unsigned int statCur : 1; - int8_t statCur; tr_stat stats[2]; tr_torrent * next; diff --git a/libtransmission/peer-mgr.c b/libtransmission/peer-mgr.c index ba8fcf3cb..cd24690df 100644 --- a/libtransmission/peer-mgr.c +++ b/libtransmission/peer-mgr.c @@ -605,13 +605,12 @@ myHandshakeDoneCB( tr_handshake * handshake, return; } - fprintf( stderr, "peer-mgr: torrent [%s] finished a handshake; isConnected is %d\n", t->tor->info.name, isConnected ); + fprintf( stderr, "peer-mgr: torrent [%s] finished a handshake. Connected? %s.\n", t->tor->info.name, (isConnected?"yes":"no") ); /* if we couldn't connect or were snubbed, * the peer's probably not worth remembering. */ if( !ok ) { tr_peer * peer = getExistingPeer( t, in_addr ); - fprintf( stderr, "peer-mgr: torrent [%s] got a bad one, and you know what? fuck them.\n", t->tor->info.name ); tr_peerIoFree( io ); --manager->connectionCount; if( peer ) { diff --git a/libtransmission/shared.c b/libtransmission/shared.c index 8a84231b2..0aa1f01e0 100644 --- a/libtransmission/shared.c +++ b/libtransmission/shared.c @@ -169,9 +169,9 @@ void tr_sharedSetPort( tr_shared * s, int port ) tr_sharedUnlock( s ); } -int tr_sharedGetPublicPort( tr_shared * s ) +int +tr_sharedGetPublicPort( const tr_shared * s ) { -fprintf( stderr, "%s:%d tr_sharedGetPublicPort returning %d\n", __FILE__, __LINE__, (int)s->publicPort ); return s->publicPort; } @@ -194,9 +194,9 @@ void tr_sharedTraversalEnable( tr_shared * s, int enable ) } } -int tr_sharedTraversalStatus( tr_shared * s ) +int tr_sharedTraversalStatus( const tr_shared * s ) { - int statuses[] = { + const int statuses[] = { TR_NAT_TRAVERSAL_MAPPED, TR_NAT_TRAVERSAL_MAPPING, TR_NAT_TRAVERSAL_UNMAPPING, diff --git a/libtransmission/shared.h b/libtransmission/shared.h index 3ea7c3c9d..dfe2673b8 100644 --- a/libtransmission/shared.h +++ b/libtransmission/shared.h @@ -54,7 +54,7 @@ void tr_sharedUnlock ( tr_shared * ); * should be called with the shared lock held. **********************************************************************/ void tr_sharedSetPort ( tr_shared *, int port ); -int tr_sharedGetPublicPort ( tr_shared * s ); +int tr_sharedGetPublicPort ( const tr_shared * s ); /*********************************************************************** * tr_sharedTraversalEnable, tr_sharedTraversalStatus @@ -63,7 +63,7 @@ int tr_sharedGetPublicPort ( tr_shared * s ); * be called with the shared lock held. **********************************************************************/ void tr_sharedTraversalEnable ( tr_shared *, int enable ); -int tr_sharedTraversalStatus ( tr_shared * ); +int tr_sharedTraversalStatus ( const tr_shared * ); #endif diff --git a/libtransmission/torrent.c b/libtransmission/torrent.c index 534112fcc..5ea24846b 100644 --- a/libtransmission/torrent.c +++ b/libtransmission/torrent.c @@ -274,6 +274,11 @@ recheckDoneCB( tr_torrent * tor ) { recheckCpState( tor ); + if( tor->doStopAfterHashCheck ) { + tor->doStopAfterHashCheck = 0; + tr_torrentStop( tor ); + } + if( tor->runStatus == TR_RUN_RUNNING ) tr_torrentStartImpl( tor ); } @@ -732,7 +737,7 @@ tr_torrentStat( tr_torrent * tor ) tr_torrentLock( tor ); - tor->statCur = ( tor->statCur + 1 ) % 2; + tor->statCur = !tor->statCur; s = &tor->stats[tor->statCur]; s->error = tor->error; @@ -1059,15 +1064,14 @@ tr_torrentStopImpl( void * vtor ) { case TR_RUN_CHECKING_WAIT: case TR_RUN_CHECKING: + tor->doStopAfterHashCheck = 1; tr_ioRecheckRemove( tor ); - tr_torrentStop( tor ); break; case TR_RUN_RUNNING: saveFastResumeNow( tor ); tr_peerMgrStopTorrent( tor->handle->peerMgr, tor->info.hash ); tor->runStatus = TR_RUN_STOPPING; - tor->stopDate = tr_date( ); tr_trackerStop( tor->tracker ); tr_ioClose( tor ); break; @@ -1089,7 +1093,6 @@ tr_torrentClose( tr_torrent * tor ) { tor->runStatusToSave = tor->runStatus; tor->runStatusToSaveIsSet = TRUE; - tor->dieFlag = TRUE; tr_torrentStop( tor ); tr_timerNew( tor->handle, freeWhenStopped, tor, 250 ); }