From cdf5cb87d683b51ad3dd760220db7fc7850be76a Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 31 May 2008 05:22:10 +0000 Subject: [PATCH] another tweak for calculating tr_stat.desiredAvailable faster, suggested by BentMyWookie --- libtransmission/peer-mgr.c | 5 +++++ libtransmission/peer-mgr.h | 1 + libtransmission/torrent.c | 13 +++++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/libtransmission/peer-mgr.c b/libtransmission/peer-mgr.c index 6663b9a5e..cdb80b1d0 100644 --- a/libtransmission/peer-mgr.c +++ b/libtransmission/peer-mgr.c @@ -1382,6 +1382,7 @@ tr_peerMgrTorrentStats( const tr_peerMgr * manager, const uint8_t * torrentHash, int * setmePeersKnown, int * setmePeersConnected, + int * setmeSeedsConnected, int * setmePeersSendingToUs, int * setmePeersGettingFromUs, int * setmePeersFrom ) @@ -1397,6 +1398,7 @@ tr_peerMgrTorrentStats( const tr_peerMgr * manager, *setmePeersKnown = tr_ptrArraySize( t->pool ); *setmePeersConnected = 0; + *setmeSeedsConnected = 0; *setmePeersSendingToUs = 0; *setmePeersGettingFromUs = 0; @@ -1420,6 +1422,9 @@ tr_peerMgrTorrentStats( const tr_peerMgr * manager, if( clientIsUploadingTo( peer ) ) ++*setmePeersGettingFromUs; + + if( atom->flags & ADDED_F_SEED_FLAG ) + ++*setmeSeedsConnected; } managerUnlock( (tr_peerMgr*)manager ); diff --git a/libtransmission/peer-mgr.h b/libtransmission/peer-mgr.h index 608e85fa8..8aac51d2a 100644 --- a/libtransmission/peer-mgr.h +++ b/libtransmission/peer-mgr.h @@ -105,6 +105,7 @@ void tr_peerMgrTorrentStats( const tr_peerMgr * manager, const uint8_t * torrentHash, int * setmePeersKnown, int * setmePeersConnected, + int * setmeSeedsConnected, int * setmePeersSendingToUs, int * setmePeersGettingFromUs, int * setmePeersFrom ); /* <-- array of TR_PEER_FROM__MAX */ diff --git a/libtransmission/torrent.c b/libtransmission/torrent.c index 0ba1f131a..b8d8a7247 100644 --- a/libtransmission/torrent.c +++ b/libtransmission/torrent.c @@ -687,6 +687,7 @@ tr_torrentStat( tr_torrent * tor ) tr_stat * s; struct tr_tracker * tc; const tr_tracker_info * ti; + int seedsConnected = 0; if( !tor ) return NULL; @@ -714,6 +715,7 @@ tr_torrentStat( tr_torrent * tor ) tor->info.hash, &s->peersKnown, &s->peersConnected, + &seedsConnected, &s->peersSendingToUs, &s->peersGettingFromUs, s->peersFrom ); @@ -741,9 +743,16 @@ tr_torrentStat( tr_torrent * tor ) s->haveUnchecked = tr_cpHaveTotal( tor->completion ) - s->haveValid; - if( !s->leftUntilDone || !tor->isRunning || !s->peersConnected ) + if( seedsConnected > 0 ) + { + s->desiredAvailable = s->leftUntilDone; + } + if( !s->leftUntilDone || !s->peersConnected ) + { s->desiredAvailable = 0; - else { + } + else + { tr_piece_index_t i; tr_bitfield * peerPieces = tr_peerMgrGetAvailable( tor->handle->peerMgr, tor->info.hash );