Commit e8b459a2 authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Connect periodic events to main

parent fbeff307
Loading
Loading
Loading
Loading
+52 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include "nodelist.h"
#include "ntmain.h"
#include "onion.h"
#include "periodic.h"
#include "policies.h"
#include "transports.h"
#include "relay.h"
@@ -1227,6 +1228,13 @@ get_signewnym_epoch(void)
  return newnym_epoch;
}

/** DOCDOC */
static int periodic_events_initialized = 0;

static periodic_event_item_t periodic_events[] = {
  END_OF_PERIODIC_EVENTS
};

typedef struct {
  time_t last_rotated_x509_certificate;
  time_t check_v3_certificate;
@@ -1267,7 +1275,46 @@ static time_to_t time_to = {
void
reset_all_main_loop_timers(void)
{
  int i;
  memset(&time_to, 0, sizeof(time_to));
  for (i = 0; periodic_events[i].name; ++i) {
    periodic_event_reschedule(&periodic_events[i]);
  }
}

/** DOCDOC */
static void
initialize_periodic_events_cb(evutil_socket_t fd, short events, void *data)
{
  (void) fd;
  (void) events;
  (void) data;
  int i;
  for (i = 0; periodic_events[i].name; ++i) {
    periodic_event_launch(&periodic_events[i]);
  }
}

/** DOCDOC */
static void
initialize_periodic_events(void)
{
  tor_assert(periodic_events_initialized == 0);
  periodic_events_initialized = 1;

  struct timeval one_second = { 1, 0 };
  event_base_once(tor_libevent_get_base(), -1, 0,
                  initialize_periodic_events_cb, NULL,
                  &one_second);
}

static void
teardown_periodic_events(void)
{
  int i;
  for (i = 0; periodic_events[i].name; ++i) {
    periodic_event_destroy(&periodic_events[i]);
  }
}

/**
@@ -2144,6 +2191,10 @@ do_main_loop(void)
    tor_assert(second_timer);
  }

  if (! periodic_events_initialized) {
    initialize_periodic_events();
  }

#ifdef HAVE_SYSTEMD_209
  uint64_t watchdog_delay;
  /* set up systemd watchdog notification. */
@@ -2852,6 +2903,7 @@ tor_free_all(int postfork)
  smartlist_free(closeable_connection_lst);
  smartlist_free(active_linked_connection_lst);
  periodic_timer_free(second_timer);
  teardown_periodic_events();
#ifndef USE_BUFFEREVENTS
  periodic_timer_free(refill_timer);
#endif
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ typedef struct periodic_event_item_t {

/** events will get their interval from first execution */
#define PERIODIC_EVENT(fn) { fn##_callback, 0, 0, NULL, #fn }
#define END_OF_PERIODIC_EVENTS { NULL, 0, 0, NULL, NULL }

#if 0
/** Refactor test, check the last_action_time was now or (now - delta - 1)