Commit 09223ad8 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Merge branch 'ticket_27861'

parents de0b07c6 d0b2b5a2
Loading
Loading
Loading
Loading

changes/bug27861

0 → 100644
+4 −0
Original line number Diff line number Diff line
  o Major bugfixes (initialization, crash):
    - Fix an assertion crash that would stop Tor from starting up if
      the code tried to activate a periodic event too early. Fixes bug
      27861; bugfix on 0.3.5.1-alpha.
+6 −5
Original line number Diff line number Diff line
@@ -1535,7 +1535,9 @@ initialize_periodic_events_cb(evutil_socket_t fd, short events, void *data)
STATIC void
initialize_periodic_events(void)
{
  tor_assert(periodic_events_initialized == 0);
  if (periodic_events_initialized)
    return;

  periodic_events_initialized = 1;

  /* Set up all periodic events. We'll launch them by roles. */
@@ -2682,6 +2684,8 @@ dns_servers_relaunch_checks(void)
void
initialize_mainloop_events(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);
@@ -2699,10 +2703,7 @@ do_main_loop(void)
  /* initialize the periodic events first, so that code that depends on the
   * events being present does not assert.
   */
  if (! periodic_events_initialized) {
  initialize_periodic_events();
  }

  initialize_mainloop_events();

  /* set up once-a-second callback. */
+6 −2
Original line number Diff line number Diff line
@@ -87,15 +87,19 @@ test_pe_launch(void *arg)
    item->fn = dumb_event_fn;
  }

  /* Lets make sure that before intialization, we can't scan the periodic
   * events list and launch them. Lets try by being a Client. */
  options = get_options_mutable();
  options->SocksPort_set = 1;
  periodic_events_on_new_options(options);
#if 0
  /* Lets make sure that before intialization, we can't scan the periodic
   * events list and launch them. Lets try by being a Client. */
  /* XXXX We make sure these events are initialized now way earlier than we
   * did before. */
  for (int i = 0; periodic_events[i].name; ++i) {
    periodic_event_item_t *item = &periodic_events[i];
    tt_int_op(periodic_event_is_enabled(item), OP_EQ, 0);
  }
#endif

  initialize_periodic_events();