diff options
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/config.c | 1 | ||||
-rw-r--r-- | src/or/main.c | 20 | ||||
-rw-r--r-- | src/or/or.h | 4 |
3 files changed, 18 insertions, 7 deletions
diff --git a/src/or/config.c b/src/or/config.c index 2ed610c337..f35c180068 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -333,6 +333,7 @@ static config_var_t _option_vars[] = { VAR("VersioningAuthoritativeDirectory",BOOL,VersioningAuthoritativeDir, "0"), V(VirtualAddrNetwork, STRING, "127.192.0.0/10"), V(WarnPlaintextPorts, CSV, "23,109,110,143"), + VAR("__ReloadTorrcOnSIGHUP", BOOL, ReloadTorrcOnSIGHUP, "1"), VAR("__AllDirActionsPrivate", BOOL, AllDirActionsPrivate, "0"), VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"), VAR("__LeaveStreamsUnattached",BOOL, LeaveStreamsUnattached, "0"), diff --git a/src/or/main.c b/src/or/main.c index 7872229f42..3d02d2e871 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -1321,7 +1321,8 @@ do_hup(void) dmalloc_log_changed(0, 1, 0, 0); #endif - log_notice(LD_GENERAL,"Received reload signal (hup). Reloading config."); + log_notice(LD_GENERAL,"Received reload signal (hup). Reloading config and " + "resetting internal state."); if (accounting_is_enabled(options)) accounting_record_bandwidth_usage(time(NULL), get_or_state()); @@ -1329,13 +1330,18 @@ do_hup(void) routerlist_reset_warnings(); addressmap_clear_transient(); /* first, reload config variables, in case they've changed */ - /* no need to provide argc/v, they've been cached inside init_from_config */ - if (options_init_from_torrc(0, NULL) < 0) { - log_err(LD_CONFIG,"Reading config failed--see warnings above. " - "For usage, try -h."); - return -1; + if (options->ReloadTorrcOnSIGHUP) { + /* no need to provide argc/v, they've been cached inside init_from_config */ + if (options_init_from_torrc(0, NULL) < 0) { + log_err(LD_CONFIG,"Reading config failed--see warnings above. " + "For usage, try -h."); + return -1; + } + options = get_options(); /* they have changed now */ + } else { + log_notice(LD_GENERAL, "Not reloading config file: the controller told " + "us not to."); } - options = get_options(); /* they have changed now */ if (authdir_mode_handles_descs(options, -1)) { /* reload the approved-routers file */ if (dirserv_load_fingerprint_file() < 0) { diff --git a/src/or/or.h b/src/or/or.h index ac384421a9..96af19e1f7 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2496,6 +2496,10 @@ typedef struct { /** Optionally, a file with GeoIP data. */ char *GeoIPFile; + /** If true, SIGHUP should reload the torrc. Sometimes controllers want + * to make this false. */ + int ReloadTorrcOnSIGHUP; + } or_options_t; /** Persistent state for an onion router, as saved to disk. */ |