mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Merge branch 'isolate_libevent_2_squashed'
This commit is contained in:
@@ -7,8 +7,6 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <event2/event.h>
|
||||
|
||||
#include "compat.h"
|
||||
#include "compat_libevent.h"
|
||||
#include "crypto.h"
|
||||
@@ -50,7 +48,7 @@ timer_cb(tor_timer_t *t, void *arg, const monotime_t *now_mono)
|
||||
|
||||
// printf("%d / %d\n",n_fired, N_TIMERS);
|
||||
if (n_fired == n_active_timers) {
|
||||
event_base_loopbreak(tor_libevent_get_base());
|
||||
tor_libevent_exit_loop_after_callback(tor_libevent_get_base());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,7 +88,7 @@ main(int argc, char **argv)
|
||||
--n_active_timers;
|
||||
}
|
||||
|
||||
event_base_loop(tor_libevent_get_base(), 0);
|
||||
tor_libevent_run_event_loop(tor_libevent_get_base(), 0);
|
||||
|
||||
int64_t total_difference = 0;
|
||||
uint64_t total_square_difference = 0;
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "channelpadding.h"
|
||||
#include "compat_libevent.h"
|
||||
#include "config.h"
|
||||
#include <event2/event.h>
|
||||
#include "compat_time.h"
|
||||
#include "main.h"
|
||||
#include "networkstatus.h"
|
||||
@@ -65,7 +64,7 @@ mock_channel_write_cell_relay2(channel_t *chan, cell_t *cell)
|
||||
(void)chan;
|
||||
tried_to_write_cell++;
|
||||
channel_tls_handle_cell(cell, ((channel_tls_t*)relay1_relay2)->conn);
|
||||
event_base_loopbreak(tor_libevent_get_base());
|
||||
tor_libevent_exit_loop_after_callback(tor_libevent_get_base());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -75,7 +74,7 @@ mock_channel_write_cell_relay1(channel_t *chan, cell_t *cell)
|
||||
(void)chan;
|
||||
tried_to_write_cell++;
|
||||
channel_tls_handle_cell(cell, ((channel_tls_t*)relay2_relay1)->conn);
|
||||
event_base_loopbreak(tor_libevent_get_base());
|
||||
tor_libevent_exit_loop_after_callback(tor_libevent_get_base());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -85,7 +84,7 @@ mock_channel_write_cell_relay3(channel_t *chan, cell_t *cell)
|
||||
(void)chan;
|
||||
tried_to_write_cell++;
|
||||
channel_tls_handle_cell(cell, ((channel_tls_t*)client_relay3)->conn);
|
||||
event_base_loopbreak(tor_libevent_get_base());
|
||||
tor_libevent_exit_loop_after_callback(tor_libevent_get_base());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -95,7 +94,7 @@ mock_channel_write_cell_client(channel_t *chan, cell_t *cell)
|
||||
(void)chan;
|
||||
tried_to_write_cell++;
|
||||
channel_tls_handle_cell(cell, ((channel_tls_t*)relay3_client)->conn);
|
||||
event_base_loopbreak(tor_libevent_get_base());
|
||||
tor_libevent_exit_loop_after_callback(tor_libevent_get_base());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -105,7 +104,7 @@ mock_channel_write_cell(channel_t *chan, cell_t *cell)
|
||||
tried_to_write_cell++;
|
||||
channel_tls_handle_cell(cell, ((channel_tls_t*)chan)->conn);
|
||||
if (!dont_stop_libevent)
|
||||
event_base_loopbreak(tor_libevent_get_base());
|
||||
tor_libevent_exit_loop_after_callback(tor_libevent_get_base());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -246,7 +245,7 @@ static void
|
||||
dummy_timer_cb(tor_timer_t *t, void *arg, const monotime_t *now_mono)
|
||||
{
|
||||
(void)t; (void)arg; (void)now_mono;
|
||||
event_base_loopbreak(tor_libevent_get_base());
|
||||
tor_libevent_exit_loop_after_callback(tor_libevent_get_base());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -264,7 +263,8 @@ dummy_nop_timer(void)
|
||||
|
||||
timer_schedule(dummy_timer, &timeout);
|
||||
|
||||
event_base_loop(tor_libevent_get_base(), 0);
|
||||
tor_libevent_run_event_loop(tor_libevent_get_base(), 0);
|
||||
|
||||
timer_free(dummy_timer);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#include "compat_libevent.h"
|
||||
|
||||
#include <event2/event.h>
|
||||
#include <event2/thread.h>
|
||||
|
||||
#include "log_test_helpers.h"
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@ mock_tor_addr_lookup__fail_on_bad_addrs(const char *name,
|
||||
|
||||
/* Helper for test_conn_get_connection() */
|
||||
static int
|
||||
fake_close_socket(evutil_socket_t sock)
|
||||
fake_close_socket(tor_socket_t sock)
|
||||
{
|
||||
(void)sock;
|
||||
return 0;
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include "orconfig.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <event2/event.h>
|
||||
|
||||
#define SCHEDULER_KIST_PRIVATE
|
||||
#define TOR_CHANNEL_INTERNAL_
|
||||
@@ -101,62 +100,6 @@ mock_kist_networkstatus_get_param(
|
||||
return 12;
|
||||
}
|
||||
|
||||
/* Event base for scheduelr tests */
|
||||
static struct event_base *mock_event_base = NULL;
|
||||
/* Setup for mock event stuff */
|
||||
static void mock_event_free_all(void);
|
||||
static void mock_event_init(void);
|
||||
static void
|
||||
mock_event_free_all(void)
|
||||
{
|
||||
tt_ptr_op(mock_event_base, OP_NE, NULL);
|
||||
|
||||
if (mock_event_base) {
|
||||
event_base_free(mock_event_base);
|
||||
mock_event_base = NULL;
|
||||
}
|
||||
|
||||
tt_ptr_op(mock_event_base, OP_EQ, NULL);
|
||||
|
||||
done:
|
||||
return;
|
||||
}
|
||||
|
||||
static void
|
||||
mock_event_init(void)
|
||||
{
|
||||
struct event_config *cfg = NULL;
|
||||
|
||||
tt_ptr_op(mock_event_base, OP_EQ, NULL);
|
||||
|
||||
/*
|
||||
* Really cut down from tor_libevent_initialize of
|
||||
* src/common/compat_libevent.c to kill config dependencies
|
||||
*/
|
||||
|
||||
if (!mock_event_base) {
|
||||
cfg = event_config_new();
|
||||
#if LIBEVENT_VERSION_NUMBER >= V(2,0,9)
|
||||
/* We can enable changelist support with epoll, since we don't give
|
||||
* Libevent any dup'd fds. This lets us avoid some syscalls. */
|
||||
event_config_set_flag(cfg, EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST);
|
||||
#endif
|
||||
mock_event_base = event_base_new_with_config(cfg);
|
||||
event_config_free(cfg);
|
||||
}
|
||||
|
||||
tt_ptr_op(mock_event_base, OP_NE, NULL);
|
||||
|
||||
done:
|
||||
return;
|
||||
}
|
||||
|
||||
static struct event_base *
|
||||
tor_libevent_get_base_mock(void)
|
||||
{
|
||||
return mock_event_base;
|
||||
}
|
||||
|
||||
static int
|
||||
scheduler_compare_channels_mock(const void *c1_v,
|
||||
const void *c2_v)
|
||||
@@ -417,9 +360,7 @@ perform_channel_state_tests(int KISTSchedRunInterval, int sched_type)
|
||||
mocked_options.KISTSchedRunInterval = KISTSchedRunInterval;
|
||||
set_scheduler_options(sched_type);
|
||||
|
||||
/* Set up libevent and scheduler */
|
||||
mock_event_init();
|
||||
MOCK(tor_libevent_get_base, tor_libevent_get_base_mock);
|
||||
/* Set up scheduler */
|
||||
scheduler_init();
|
||||
/*
|
||||
* Install the compare channels mock so we can test
|
||||
@@ -523,14 +464,12 @@ perform_channel_state_tests(int KISTSchedRunInterval, int sched_type)
|
||||
|
||||
channel_free_all();
|
||||
scheduler_free_all();
|
||||
mock_event_free_all();
|
||||
|
||||
done:
|
||||
tor_free(ch1);
|
||||
tor_free(ch2);
|
||||
|
||||
UNMOCK(scheduler_compare_channels);
|
||||
UNMOCK(tor_libevent_get_base);
|
||||
UNMOCK(get_options);
|
||||
cleanup_scheduler_options();
|
||||
|
||||
@@ -635,10 +574,7 @@ test_scheduler_loop_vanilla(void *arg)
|
||||
set_scheduler_options(SCHEDULER_VANILLA);
|
||||
mocked_options.KISTSchedRunInterval = 0;
|
||||
|
||||
/* Set up libevent and scheduler */
|
||||
|
||||
mock_event_init();
|
||||
MOCK(tor_libevent_get_base, tor_libevent_get_base_mock);
|
||||
/* Set up scheduler */
|
||||
scheduler_init();
|
||||
/*
|
||||
* Install the compare channels mock so we can test
|
||||
@@ -786,7 +722,6 @@ test_scheduler_loop_vanilla(void *arg)
|
||||
channel_flush_some_cells_mock_free_all();
|
||||
channel_free_all();
|
||||
scheduler_free_all();
|
||||
mock_event_free_all();
|
||||
|
||||
done:
|
||||
tor_free(ch1);
|
||||
@@ -795,7 +730,6 @@ test_scheduler_loop_vanilla(void *arg)
|
||||
|
||||
UNMOCK(channel_flush_some_cells);
|
||||
UNMOCK(scheduler_compare_channels);
|
||||
UNMOCK(tor_libevent_get_base);
|
||||
UNMOCK(get_options);
|
||||
}
|
||||
|
||||
@@ -917,8 +851,6 @@ test_scheduler_initfree(void *arg)
|
||||
tt_ptr_op(channels_pending, ==, NULL);
|
||||
tt_ptr_op(run_sched_ev, ==, NULL);
|
||||
|
||||
mock_event_init();
|
||||
MOCK(tor_libevent_get_base, tor_libevent_get_base_mock);
|
||||
MOCK(get_options, mock_get_options);
|
||||
set_scheduler_options(SCHEDULER_KIST);
|
||||
set_scheduler_options(SCHEDULER_KIST_LITE);
|
||||
@@ -935,9 +867,6 @@ test_scheduler_initfree(void *arg)
|
||||
|
||||
scheduler_free_all();
|
||||
|
||||
UNMOCK(tor_libevent_get_base);
|
||||
mock_event_free_all();
|
||||
|
||||
tt_ptr_op(channels_pending, ==, NULL);
|
||||
tt_ptr_op(run_sched_ev, ==, NULL);
|
||||
|
||||
|
||||
+14
-21
@@ -12,7 +12,6 @@
|
||||
#include "compat_libevent.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <event2/event.h>
|
||||
|
||||
#define MAX_INFLIGHT (1<<16)
|
||||
|
||||
@@ -159,6 +158,7 @@ static tor_weak_rng_t weak_rng;
|
||||
static int n_sent = 0;
|
||||
static int rsa_sent = 0;
|
||||
static int ecdh_sent = 0;
|
||||
static int n_received_previously = 0;
|
||||
static int n_received = 0;
|
||||
static int no_shutdown = 0;
|
||||
|
||||
@@ -230,7 +230,7 @@ add_n_work_items(threadpool_t *tp, int n)
|
||||
ent = add_work(tp);
|
||||
if (! ent) {
|
||||
puts("Z");
|
||||
tor_event_base_loopexit(tor_libevent_get_base(), NULL);
|
||||
tor_libevent_exit_loop_after_delay(tor_libevent_get_base(), NULL);
|
||||
return -1;
|
||||
}
|
||||
if (n_try_cancel < opt_n_cancel &&
|
||||
@@ -256,19 +256,13 @@ add_n_work_items(threadpool_t *tp, int n)
|
||||
static int shutting_down = 0;
|
||||
|
||||
static void
|
||||
replysock_readable_cb(tor_socket_t sock, short what, void *arg)
|
||||
replysock_readable_cb(threadpool_t *tp)
|
||||
{
|
||||
threadpool_t *tp = arg;
|
||||
replyqueue_t *rq = threadpool_get_replyqueue(tp);
|
||||
|
||||
int old_r = n_received;
|
||||
(void) sock;
|
||||
(void) what;
|
||||
|
||||
replyqueue_process(rq);
|
||||
if (old_r == n_received)
|
||||
if (n_received_previously == n_received)
|
||||
return;
|
||||
|
||||
n_received_previously = n_received;
|
||||
|
||||
if (opt_verbose) {
|
||||
printf("%d / %d", n_received, n_sent);
|
||||
if (opt_n_cancel)
|
||||
@@ -308,7 +302,7 @@ replysock_readable_cb(tor_socket_t sock, short what, void *arg)
|
||||
handle_reply_shutdown, NULL);
|
||||
{
|
||||
struct timeval limit = { 2, 0 };
|
||||
tor_event_base_loopexit(tor_libevent_get_base(), &limit);
|
||||
tor_libevent_exit_loop_after_delay(tor_libevent_get_base(), &limit);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -337,7 +331,6 @@ main(int argc, char **argv)
|
||||
threadpool_t *tp;
|
||||
int i;
|
||||
tor_libevent_cfg evcfg;
|
||||
struct event *ev;
|
||||
uint32_t as_flags = 0;
|
||||
|
||||
for (i = 1; i < argc; ++i) {
|
||||
@@ -411,11 +404,11 @@ main(int argc, char **argv)
|
||||
memset(&evcfg, 0, sizeof(evcfg));
|
||||
tor_libevent_initialize(&evcfg);
|
||||
|
||||
ev = tor_event_new(tor_libevent_get_base(),
|
||||
replyqueue_get_socket(rq), EV_READ|EV_PERSIST,
|
||||
replysock_readable_cb, tp);
|
||||
|
||||
event_add(ev, NULL);
|
||||
{
|
||||
int r = threadpool_register_reply_event(tp,
|
||||
replysock_readable_cb);
|
||||
tor_assert(r == 0);
|
||||
}
|
||||
|
||||
#ifdef TRACK_RESPONSES
|
||||
handled = bitarray_init_zero(opt_n_items);
|
||||
@@ -433,10 +426,10 @@ main(int argc, char **argv)
|
||||
|
||||
{
|
||||
struct timeval limit = { 180, 0 };
|
||||
tor_event_base_loopexit(tor_libevent_get_base(), &limit);
|
||||
tor_libevent_exit_loop_after_delay(tor_libevent_get_base(), &limit);
|
||||
}
|
||||
|
||||
event_base_loop(tor_libevent_get_base(), 0);
|
||||
tor_libevent_run_event_loop(tor_libevent_get_base(), 0);
|
||||
|
||||
if (n_sent != opt_n_items || n_received+n_successful_cancel != n_sent) {
|
||||
printf("%d vs %d\n", n_sent, opt_n_items);
|
||||
|
||||
Reference in New Issue
Block a user