[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] In channelpadding tests that touch libevent, call event_reinit().
commit 95fa7d1cf82c68d7d39f423cf71fa8e097662de3
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
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);
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits