aboutsummaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-04-10 14:44:38 -0400
committerNick Mathewson <nickm@torproject.org>2018-04-10 14:44:38 -0400
commit386f8016b7373bec346162705671751f07f281d7 (patch)
tree0eefd550903fc9caac798f5f5c4dd205437e5a66 /src/or
parentdb6902c23530f8d58e999701685e9cbd74b15a82 (diff)
downloadtor-386f8016b7373bec346162705671751f07f281d7.tar.gz
tor-386f8016b7373bec346162705671751f07f281d7.zip
Fix another crash-on-no-threadpool bug.
This one happens if for some reason you start with DirPort enabled but server mode turned off entirely. Fixes a case of bug 23693; bugfix on 0.3.1.1-alpha.
Diffstat (limited to 'src/or')
-rw-r--r--src/or/config.c10
-rw-r--r--src/or/main.c2
2 files changed, 10 insertions, 2 deletions
diff --git a/src/or/config.c b/src/or/config.c
index 156ffc9dfb..cac4ce8125 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -1941,9 +1941,16 @@ options_act(const or_options_t *old_options)
if (transition_affects_workers) {
log_info(LD_GENERAL,
"Worker-related options changed. Rotating workers.");
+ const int server_mode_turned_on =
+ server_mode(options) && !server_mode(old_options);
+ const int dir_server_mode_turned_on =
+ dir_server_mode(options) && !dir_server_mode(old_options);
- if (server_mode(options) && !server_mode(old_options)) {
+ if (server_mode_turned_on || dir_server_mode_turned_on) {
cpu_init();
+ }
+
+ if (server_mode_turned_on) {
ip_address_changed(0);
if (have_completed_a_circuit() || !any_predicted_circuits(time(NULL)))
inform_testing_reachability();
@@ -4494,6 +4501,7 @@ options_transition_affects_workers(const or_options_t *old_options,
old_options->SafeLogging_ != new_options->SafeLogging_ ||
old_options->ClientOnly != new_options->ClientOnly ||
server_mode(old_options) != server_mode(new_options) ||
+ dir_server_mode(old_options) != dir_server_mode(new_options) ||
public_server_mode(old_options) != public_server_mode(new_options) ||
!config_lines_eq(old_options->Logs, new_options->Logs) ||
old_options->LogMessageDomains != new_options->LogMessageDomains)
diff --git a/src/or/main.c b/src/or/main.c
index 197dfd4308..e9723cb0b7 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -2487,7 +2487,7 @@ do_main_loop(void)
now = time(NULL);
directory_info_has_arrived(now, 1, 0);
- if (server_mode(get_options())) {
+ if (server_mode(get_options()) || dir_server_mode(get_options())) {
/* launch cpuworkers. Need to do this *after* we've read the onion key. */
cpu_init();
}