From d620e4c3ea42b0df6eb5e8dab92d7a8f031fa617 Mon Sep 17 00:00:00 2001 From: Dirk Engling Date: Thu, 5 Nov 2026 13:59:14 +0100 Subject: Take the clock off the wall --- src/ot_fullscrape.c | 2 +- src/trackerlogic.c | 15 +++++++++++---- src/trackerlogic.h | 12 ++++++------ 3 files changed, 18 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/ot_fullscrape.c b/src/ot_fullscrape.c index 895d7d2..85be65d 100644 --- a/src/ot_fullscrape.c +++ b/src/ot_fullscrape.c @@ -131,7 +131,7 @@ static void fullscrape_write_one( ot_tasktype mode, char **cursor, ot_torrent *t case TASK_FULLSCRAPE_TRACKERSTATE: hex_from_hash(r, *hash); r += 2 * sizeof(ot_hash); - fmt_append(&r, r_end, ":%zd:%zd\n", torrent->peer_list6->base, down_count); + fmt_append(&r, r_end, ":%zd:%zd\n", (ssize_t)time_since_minutes(torrent->peer_list6->base), down_count); break; } *cursor = r; diff --git a/src/trackerlogic.c b/src/trackerlogic.c index 8e30a48..60d5b18 100644 --- a/src/trackerlogic.c +++ b/src/trackerlogic.c @@ -38,10 +38,17 @@ void free_peerlist(ot_peerlist *peer_list) { free(peer_list); } -void add_torrent_from_saved_state(ot_hash const hash, ot_time base, size_t down_count) { +/* How many minutes before this moment the torrent was last touched, which is + what a state dump records. */ +void add_torrent_from_saved_state(ot_hash const hash, ot_time age, size_t down_count) { int exactmatch; ot_torrent *torrent; - ot_vector *torrents_list = mutex_bucket_lock_by_hash(hash); + ot_vector *torrents_list; + + if (age > OT_TORRENT_TIMEOUT) + return; + + torrents_list = mutex_bucket_lock_by_hash(hash); if (!accesslist_hashisvalid(hash)) { mutex_bucket_unlock_by_hash(hash, 0); @@ -66,8 +73,8 @@ void add_torrent_from_saved_state(ot_hash const hash, ot_time base, size_t down_ memset(torrent->peer_list6, 0, sizeof(ot_peerlist)); memset(torrent->peer_list4, 0, sizeof(ot_peerlist)); - torrent->peer_list6->base = base; - torrent->peer_list4->base = base; + torrent->peer_list6->base = time_now_minutes() - age; + torrent->peer_list4->base = time_now_minutes() - age; torrent->peer_list6->down_count = down_count; torrent->peer_list4->down_count = down_count; diff --git a/src/trackerlogic.h b/src/trackerlogic.h index c8d859c..f6aa8cc 100644 --- a/src/trackerlogic.h +++ b/src/trackerlogic.h @@ -76,12 +76,12 @@ typedef struct { on startup */ #define RANDOMTORRENTS (1024 * 1024 * 1) -#if defined(CLOCK_REALTIME_COARSE) -#define OT_CLOCK_CHEAP CLOCK_REALTIME_COARSE /* Linux */ -#elif defined(CLOCK_REALTIME_FAST) -#define OT_CLOCK_CHEAP CLOCK_REALTIME_FAST /* the BSDs */ +#if defined(CLOCK_MONOTONIC_COARSE) +#define OT_CLOCK_CHEAP CLOCK_MONOTONIC_COARSE /* Linux and FreeBSD */ +#elif defined(CLOCK_MONOTONIC_FAST) +#define OT_CLOCK_CHEAP CLOCK_MONOTONIC_FAST /* the other BSDs */ #else -#define OT_CLOCK_CHEAP CLOCK_REALTIME /* macOS and whatever else */ +#define OT_CLOCK_CHEAP CLOCK_MONOTONIC /* macOS and whatever else */ #endif static inline ot_time time_now_seconds(void) { @@ -285,7 +285,7 @@ size_t add_peer_to_torrent_and_return_peers(PROTO_FLAG proto, struct ot_workstru size_t remove_peer_from_torrent(PROTO_FLAG proto, struct ot_workstruct *ws); void return_tcp_scrape_for_torrent(ot_hash const *hash_list, size_t amount, char **reply, const char *reply_end); size_t return_udp_scrape_for_torrent(ot_hash const hash, char *reply); -void add_torrent_from_saved_state(ot_hash const hash, ot_time base, size_t down_count); +void add_torrent_from_saved_state(ot_hash const hash, ot_time age, size_t down_count); #ifdef _DEBUG_RANDOMTORRENTS void trackerlogic_add_random_torrents(size_t amount); #endif -- cgit v1.3