diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-12-15 12:48:29 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-12-15 12:48:29 -0500 |
commit | 20f802ea3cd5d8b3993a101da03dfec95bc9049e (patch) | |
tree | 864bbaad076040c6071d2a171b3f7716b78ca5e9 /src/or | |
parent | fdd5734875a49c4bfdebde45189038dd42306504 (diff) | |
download | tor-20f802ea3cd5d8b3993a101da03dfec95bc9049e.tar.gz tor-20f802ea3cd5d8b3993a101da03dfec95bc9049e.zip |
Add an option to disable signal handler installation.
Closes ticket 24588.
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/config.c | 7 | ||||
-rw-r--r-- | src/or/main.c | 4 | ||||
-rw-r--r-- | src/or/or.h | 5 |
3 files changed, 15 insertions, 1 deletions
diff --git a/src/or/config.c b/src/or/config.c index 016d87f81f..ebbe726c7b 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -564,6 +564,7 @@ static config_var_t option_vars_[] = { VAR("__ReloadTorrcOnSIGHUP", BOOL, ReloadTorrcOnSIGHUP, "1"), VAR("__AllDirActionsPrivate", BOOL, AllDirActionsPrivate, "0"), VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"), + VAR("__DisableSignalHandlers", BOOL, DisableSignalHandlers, "0"), VAR("__LeaveStreamsUnattached",BOOL, LeaveStreamsUnattached, "0"), VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword, NULL), @@ -4652,6 +4653,12 @@ options_transition_allowed(const or_options_t *old, return -1; } + if (old->DisableSignalHandlers != new_val->DisableSignalHandlers) { + *msg = tor_strdup("While Tor is running, changing DisableSignalHandlers " + "is not allowed."); + return -1; + } + if (strcmp(old->DataDirectory,new_val->DataDirectory)!=0) { tor_asprintf(msg, "While Tor is running, changing DataDirectory " diff --git a/src/or/main.c b/src/or/main.c index 38f25cae50..9adad07941 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -3057,8 +3057,10 @@ void handle_signals(void) { int i; + const int enabled = !get_options()->DisableSignalHandlers; + for (i = 0; signal_handlers[i].signal_value >= 0; ++i) { - if (signal_handlers[i].try_to_register) { + if (enabled && signal_handlers[i].try_to_register) { signal_handlers[i].signal_event = tor_evsignal_new(tor_libevent_get_base(), signal_handlers[i].signal_value, diff --git a/src/or/or.h b/src/or/or.h index 9c53949879..91d6436389 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4651,6 +4651,11 @@ typedef struct { /** List of files that were opened by %include in torrc and torrc-defaults */ smartlist_t *FilesOpenedByIncludes; + + /** If true, Tor shouldn't install any posix signal handlers, since it is + * running embedded inside another process. + */ + int DisableSignalHandlers; } or_options_t; #define LOG_PROTOCOL_WARN (get_protocol_warning_severity_level()) |