|
@@ -1172,12 +1172,26 @@ options_act(or_options_t *old_options)
|
|
|
or_options_t *options = get_options();
|
|
|
int running_tor = options->command == CMD_RUN_TOR;
|
|
|
char *msg;
|
|
|
+ const int transition_affects_workers =
|
|
|
+ old_options && options_transition_affects_workers(old_options, options);
|
|
|
|
|
|
if (running_tor && !have_lockfile()) {
|
|
|
if (try_locking(options, 1) < 0)
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
+ /* We want to reinit keys as needed before we do much of anything else:
|
|
|
+ keys are important, and other things can depend on them. */
|
|
|
+ if (running_tor &&
|
|
|
+ (transition_affects_workers ||
|
|
|
+ (options->V3AuthoritativeDir && (!old_options ||
|
|
|
+ !old_options->V3AuthoritativeDir)))) {
|
|
|
+ if (init_keys() < 0) {
|
|
|
+ log_warn(LD_BUG,"Error initializing keys; exiting");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (consider_adding_dir_authorities(options, old_options) < 0)
|
|
|
return -1;
|
|
|
|
|
@@ -1346,14 +1360,10 @@ options_act(or_options_t *old_options)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (options_transition_affects_workers(old_options, options)) {
|
|
|
+ if (transition_affects_workers) {
|
|
|
log_info(LD_GENERAL,
|
|
|
"Worker-related options changed. Rotating workers.");
|
|
|
|
|
|
- if (init_keys() < 0) {
|
|
|
- log_warn(LD_BUG,"Error initializing keys; exiting");
|
|
|
- return -1;
|
|
|
- }
|
|
|
if (server_mode(options) && !server_mode(old_options)) {
|
|
|
ip_address_changed(0);
|
|
|
if (can_complete_circuit || !any_predicted_circuits(time(NULL)))
|
|
@@ -1367,9 +1377,6 @@ options_act(or_options_t *old_options)
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- if (options->V3AuthoritativeDir && !old_options->V3AuthoritativeDir)
|
|
|
- init_keys();
|
|
|
-
|
|
|
if (options->PerConnBWRate != old_options->PerConnBWRate ||
|
|
|
options->PerConnBWBurst != old_options->PerConnBWBurst)
|
|
|
connection_or_update_token_buckets(get_connection_array(), options);
|