[tor-commits] [tor/master] In channelpadding tests that touch libevent, call event_reinit().

nickm at torproject.org nickm at torproject.org
Wed May 10 15:02:06 UTC 2017


commit 95fa7d1cf82c68d7d39f423cf71fa8e097662de3
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed May 10 11:00:07 2017 -0400

    In channelpadding tests that touch libevent, call event_reinit().
    
    This is necessary to avoid crashes and test failures on kevent-based
    systems.
    
    Fixes bug 22209; bug not in any released Tor.
---
 src/common/compat_libevent.c   | 9 +++++++++
 src/common/compat_libevent.h   | 1 +
 src/test/test_channelpadding.c | 7 +++++++
 3 files changed, 17 insertions(+)

diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c
index 1146d02..31eb4ac 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -280,6 +280,15 @@ tor_gettimeofday_cache_set(const struct timeval *tv)
   tor_assert(tv);
   memcpy(&cached_time_hires, tv, sizeof(*tv));
 }
+
+/** For testing: called post-fork to make libevent reinitialize
+ * kernel structures. */
+void
+tor_libevent_postfork(void)
+{
+  int r = event_reinit(tor_libevent_get_base());
+  tor_assert(r == 0);
+}
 #endif
 #endif
 
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index 96c48d5..9049384 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -54,6 +54,7 @@ void tor_gettimeofday_cached(struct timeval *tv);
 void tor_gettimeofday_cache_clear(void);
 #ifdef TOR_UNIT_TESTS
 void tor_gettimeofday_cache_set(const struct timeval *tv);
+void tor_libevent_postfork(void);
 #endif
 
 #ifdef COMPAT_LIBEVENT_PRIVATE
diff --git a/src/test/test_channelpadding.c b/src/test/test_channelpadding.c
index cffc8d0..ba97694 100644
--- a/src/test/test_channelpadding.c
+++ b/src/test/test_channelpadding.c
@@ -258,6 +258,9 @@ test_channelpadding_timers(void *arg)
   channelpadding_decision_t decision;
   channel_t *chans[CHANNELS_TO_TEST];
   (void)arg;
+
+  tor_libevent_postfork();
+
   connection_array = smartlist_new();
 
   monotime_init();
@@ -349,6 +352,8 @@ test_channelpadding_consensus(void *arg)
   int64_t val;
   (void)arg;
 
+  tor_libevent_postfork();
+
   /*
    * Params tested:
    *   nf_pad_before_usage
@@ -723,6 +728,8 @@ test_channelpadding_decide_to_pad_channel(void *arg)
   connection_array = smartlist_new();
   (void)arg;
 
+  tor_libevent_postfork();
+
   monotime_init();
   timers_initialize();
   setup_full_capture_of_logs(LOG_WARN);



More information about the tor-commits mailing list