diff options
author | Roger Dingledine <arma@torproject.org> | 2015-02-09 01:05:31 -0500 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2015-02-09 01:05:31 -0500 |
commit | 56061976dbe148dc615c8072c962ddfc0d719585 (patch) | |
tree | b6c48264147ad92838473212fc1811f038670e1e /src/or/main.c | |
parent | 1cb9064d7d0f1b08d9595a42b80867118a26646a (diff) | |
download | tor-56061976dbe148dc615c8072c962ddfc0d719585.tar.gz tor-56061976dbe148dc615c8072c962ddfc0d719585.zip |
Recover better when our clock jumps back many hours
like might happen for Tails or Whonix users who start with a very wrong
hardware clock, use Tor to discover a more accurate time, and then
fix their clock.
Resolves part of ticket 8766.
(There are still some timers in various places that aren't addressed yet.)
Diffstat (limited to 'src/or/main.c')
-rw-r--r-- | src/or/main.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/or/main.c b/src/or/main.c index d3ecf36f3a..a299f9886b 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -1227,6 +1227,15 @@ typedef struct { static time_to_t time_to = { 0 }; +/** Reset all the time_to's so we'll do all our actions again as if we + * just started up. + * Useful if our clock just moved back a long time from the future, + * so we don't wait until that future arrives again before acting. + */ +void reset_all_main_loop_timers(void) { + memset(&time_to, 0, sizeof(time_to_t)); +} + /** * Update our schedule so that we'll check whether we need to update our * descriptor immediately, rather than after up to CHECK_DESCRIPTOR_INTERVAL @@ -1768,8 +1777,6 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg) if (seconds_elapsed < -NUM_JUMPED_SECONDS_BEFORE_WARN || seconds_elapsed >= NUM_JUMPED_SECONDS_BEFORE_WARN) { circuit_note_clock_jumped(seconds_elapsed); - /* XXX if the time jumps *back* many months, do our events in - * run_scheduled_events() recover? I don't think they do. -RD */ } else if (seconds_elapsed > 0) stats_n_seconds_working += seconds_elapsed; |