diff --git a/src/or/dirvote.c b/src/or/dirvote.c index f28a7311bd..c5c92e6a06 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -1061,12 +1061,17 @@ static struct { /** Set voting_schedule to hold the timing for the next vote we should be * doing. */ void -dirvote_recalculate_timing(time_t now) +dirvote_recalculate_timing(or_options_t *options, time_t now) { int interval, vote_delay, dist_delay; time_t start; time_t end; - networkstatus_vote_t *consensus = networkstatus_get_live_consensus(now); + networkstatus_vote_t *consensus; + + if (!authdir_mode_v3(options)) + return; + + consensus = networkstatus_get_live_consensus(now); memset(&voting_schedule, 0, sizeof(voting_schedule)); @@ -1106,8 +1111,10 @@ dirvote_recalculate_timing(time_t now) /** Entry point: Take whatever voting actions are pending as of now. */ void -dirvote_act(time_t now) +dirvote_act(or_options_t *options, time_t now) { + if (!authdir_mode_v3(options)) + return; if (!voting_schedule.voting_starts) { char *keys = list_v3_auth_ids(); authority_cert_t *c = get_my_v3_authority_cert(); @@ -1115,7 +1122,7 @@ dirvote_act(time_t now) "Mine is %s.", keys, hex_str(c->cache_info.identity_digest, DIGEST_LEN)); tor_free(keys); - dirvote_recalculate_timing(now); + dirvote_recalculate_timing(options, now); } if (voting_schedule.voting_starts < now && !voting_schedule.have_voted) { log_notice(LD_DIR, "Time to vote."); @@ -1150,7 +1157,7 @@ dirvote_act(time_t now) voting_schedule.have_published_consensus = 1; /* XXXX020 we will want to try again later if we haven't got enough * signatures yet. */ - dirvote_recalculate_timing(now); + dirvote_recalculate_timing(options, now); } } diff --git a/src/or/main.c b/src/or/main.c index cfe4745642..37aefb46fc 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -1006,7 +1006,7 @@ run_scheduled_events(time_t now) /** 2c. Let directory voting happen. */ if (authdir_mode_v3(options)) - dirvote_act(now); + dirvote_act(options, now); /** 3a. Every second, we examine pending circuits and prune the * ones which have been pending for more than a few seconds. diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index eac77f2f0c..e8f8e4f27f 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -984,7 +984,7 @@ networkstatus_set_current_consensus(const char *consensus, int from_cache, current_consensus = c; update_consensus_networkstatus_fetch_time(now); - dirvote_recalculate_timing(now); + dirvote_recalculate_timing(get_options(), now); routerstatus_list_update_named_server_map(); if (!from_cache) { diff --git a/src/or/or.h b/src/or/or.h index 003f597ce1..f37e8865bb 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2932,8 +2932,8 @@ typedef struct vote_timing_t { /* vote scheduling */ void dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out); time_t dirvote_get_start_of_next_interval(time_t now, int interval); -void dirvote_recalculate_timing(time_t now); -void dirvote_act(time_t now); +void dirvote_recalculate_timing(or_options_t *options, time_t now); +void dirvote_act(or_options_t *options, time_t now); /* invoked on timers and by outside triggers. */ struct pending_vote_t * dirvote_add_vote(const char *vote_body,