return 1;
}
-/* Returns 1, if torrent is gone, 0 otherwise */
-static int clean_peerlist( ot_peerlist *peer_list ) {
- int i, timedout = (int)( NOW - peer_list->base );
+/* Returns 1, if torrent is gone, 0 otherwise
+ We expect NOW as a parameter since calling time() may be expensive*/
+static int clean_peerlist( time_t time_now, ot_peerlist *peer_list ) {
+ int i, timedout = (int)( time_now - peer_list->base );
if( !timedout ) return 0;
if( timedout > OT_POOLS_COUNT ) timedout = OT_POOLS_COUNT;
byte_zero( torrent->peer_list, sizeof( ot_peerlist ));
torrent->peer_list->base = NOW;
} else
- clean_peerlist( torrent->peer_list );
+ clean_peerlist( NOW, torrent->peer_list );
peer_pool = &torrent->peer_list->peers[0];
peer_dest = vector_find_or_insert( peer_pool, (void*)peer, sizeof( ot_peer ), OT_PEER_COMPARE_SIZE, &exactmatch );
ot_torrent *torrent = binary_search( hash, torrents_list->data, torrents_list->size, sizeof( ot_torrent ), OT_HASH_COMPARE_SIZE, &exactmatch );
if( !exactmatch ) return 0;
- clean_peerlist( torrent->peer_list );
+ clean_peerlist( NOW, torrent->peer_list );
for( i=0; i<OT_POOLS_COUNT; ++i ) {
peers += torrent->peer_list->peers[i].size;
/* Fetches stats from tracker */
size_t return_stats_for_tracker( char *reply ) {
+ time_t time_now = NOW;
int torrent_count = 0, peer_count = 0, seed_count = 0;
char *r = reply;
int i,j,k;
torrent_count += torrents_list->size;
for( j=0; j<torrents_list->size; ++j ) {
ot_peerlist *peer_list = ( ((ot_torrent*)(torrents_list->data))[j] ).peer_list;
- clean_peerlist( peer_list );
+ clean_peerlist( time_now, peer_list );
for( k=0; k<OT_POOLS_COUNT; ++k ) {
peer_count += peer_list->peers[k].size;
seed_count += peer_list->seed_count[k];
if( !exactmatch ) return;
/* Maybe this does the job */
- if( clean_peerlist( torrent->peer_list ) ) {
+ if( clean_peerlist( NOW, torrent->peer_list ) ) {
#ifdef WANT_CLOSED_TRACKER
if( !g_closedtracker )
#endif