From 302908657f492f064f9bddac794db477f53ab958 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 26 Apr 2018 14:38:43 -0400 Subject: [PATCH] Fix a test assertion failure due to uninitialized mainloop events Bug not in any released Tor. --- src/or/main.c | 23 +++++++++++++++-------- src/or/main.h | 1 + src/test/testing_common.c | 3 +++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/or/main.c b/src/or/main.c index 83d1e6a41a..a7896fafa5 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -2617,6 +2617,20 @@ do_hup(void) return 0; } +/** Initialize some mainloop_event_t objects that we require. */ +STATIC void +initialize_mainloop_events(void) +{ + if (!schedule_active_linked_connections_event) { + schedule_active_linked_connections_event = + mainloop_event_postloop_new(schedule_active_linked_connections_cb, NULL); + } + if (!postloop_cleanup_ev) { + postloop_cleanup_ev = + mainloop_event_postloop_new(postloop_cleanup_cb, NULL); + } +} + /** Tor main loop. */ int do_main_loop(void) @@ -2630,14 +2644,7 @@ do_main_loop(void) initialize_periodic_events(); } - if (!schedule_active_linked_connections_event) { - schedule_active_linked_connections_event = - mainloop_event_postloop_new(schedule_active_linked_connections_cb, NULL); - } - if (!postloop_cleanup_ev) { - postloop_cleanup_ev = - mainloop_event_postloop_new(postloop_cleanup_cb, NULL); - } + initialize_mainloop_events(); /* initialize dns resolve map, spawn workers if needed */ if (dns_init() < 0) { diff --git a/src/or/main.h b/src/or/main.h index 4f3b84e302..33ef40ce40 100644 --- a/src/or/main.h +++ b/src/or/main.h @@ -97,6 +97,7 @@ extern token_bucket_rw_t global_relayed_bucket; #ifdef MAIN_PRIVATE STATIC void init_connection_lists(void); +STATIC void initialize_mainloop_events(void); STATIC void close_closeable_connections(void); STATIC void initialize_periodic_events(void); STATIC void teardown_periodic_events(void); diff --git a/src/test/testing_common.c b/src/test/testing_common.c index b9b36d96d0..312c07471d 100644 --- a/src/test/testing_common.c +++ b/src/test/testing_common.c @@ -8,6 +8,7 @@ * \brief Common pieces to implement unit tests. **/ +#define MAIN_PRIVATE #include "orconfig.h" #include "or.h" #include "control.h" @@ -16,6 +17,7 @@ #include "backtrace.h" #include "test.h" #include "channelpadding.h" +#include "main.h" #include #ifdef HAVE_FCNTL_H @@ -290,6 +292,7 @@ main(int c, const char **v) } rep_hist_init(); setup_directory(); + initialize_mainloop_events(); options_init(options); options->DataDirectory = tor_strdup(temp_dir); tor_asprintf(&options->KeyDirectory, "%s"PATH_SEPARATOR"keys",