Commit 20f802ea authored by Nick Mathewson's avatar Nick Mathewson 👁
Browse files

Add an option to disable signal handler installation.

Closes ticket 24588.
parent fdd57348
o Minor features (embedding, mobile):
- Applications that want to embed Tor can now tell Tor not to register
any of its own POSIX signal handlers, using the __DisableSignalHandlers
option. This option is not meant for general use. Closes ticket 24588.
......@@ -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 "
......
......@@ -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,
......
......@@ -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())
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment