diff --git a/libtransmission/internal.h b/libtransmission/internal.h index 8ce58008f..9dc800f95 100644 --- a/libtransmission/internal.h +++ b/libtransmission/internal.h @@ -162,6 +162,7 @@ struct tr_torrent tr_recheck_state recheckState; + time_t lastStatTime; tr_stat stats[2]; tr_torrent * next; diff --git a/libtransmission/torrent.c b/libtransmission/torrent.c index 08579a289..171076c39 100644 --- a/libtransmission/torrent.c +++ b/libtransmission/torrent.c @@ -713,6 +713,13 @@ tr_torrentStat( tr_torrent * tor ) { tr_stat * s; struct tr_tracker * tc; + const time_t now = time( NULL ); + + /* generating these stats is expensive -- + * update a maximum of once per second */ + if( tor->lastStatTime == now ) + return &tor->stats[tor->statCur]; + tor->lastStatTime = now; tr_torrentLock( tor );