commit 302908657f492f064f9bddac794db477f53ab958 Author: Nick Mathewson nickm@torproject.org Date: Thu Apr 26 14:38:43 2018 -0400
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 83d1e6a41..a7896fafa 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 4f3b84e30..33ef40ce4 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 b9b36d96d..312c07471 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 <stdio.h> #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",