LCOV - code coverage report
Current view: top level - core/mainloop - mainloop_sys.c (source / functions) Hit Total Coverage
Test: lcov.info Lines: 16 16 100.0 %
Date: 2021-11-24 03:28:48 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /* Copyright (c) 2001 Matej Pfajfar.
       2             :  * Copyright (c) 2001-2004, Roger Dingledine.
       3             :  * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
       4             :  * Copyright (c) 2007-2021, The Tor Project, Inc. */
       5             : /* See LICENSE for licensing information */
       6             : 
       7             : /**
       8             :  * @file mainloop_sys.c
       9             :  * @brief Declare the "mainloop" subsystem.
      10             :  **/
      11             : 
      12             : #include "core/or/or.h"
      13             : #include "core/mainloop/mainloop_sys.h"
      14             : #include "core/mainloop/mainloop.h"
      15             : #include "core/mainloop/mainloop_state_st.h"
      16             : #include "core/mainloop/netstatus.h"
      17             : #include "lib/conf/conftypes.h"
      18             : #include "lib/conf/confdecl.h"
      19             : 
      20             : #include "lib/subsys/subsys.h"
      21             : 
      22             : static int
      23         244 : subsys_mainloop_initialize(void)
      24             : {
      25         244 :   initialize_periodic_events();
      26         244 :   return 0;
      27             : }
      28             : 
      29             : static void
      30         235 : subsys_mainloop_shutdown(void)
      31             : {
      32         235 :   tor_mainloop_free_all();
      33         235 : }
      34             : 
      35             : /** Declare a list of state variables for mainloop state. */
      36             : #define CONF_CONTEXT TABLE
      37             : #include "core/mainloop/mainloop_state.inc"
      38             : #undef CONF_CONTEXT
      39             : 
      40             : /** Magic number for mainloop state objects */
      41             : #define MAINLOOP_STATE_MAGIC 0x59455449
      42             : 
      43             : /**
      44             :  * Format object for mainloop state.
      45             :  **/
      46             : static config_format_t mainloop_state_fmt = {
      47             :   .size = sizeof(mainloop_state_t),
      48             :   .magic = { "mainloop_state",
      49             :              MAINLOOP_STATE_MAGIC,
      50             :              offsetof(mainloop_state_t, magic)
      51             :             },
      52             :   .vars = mainloop_state_t_vars,
      53             : };
      54             : 
      55             : /**
      56             :  */
      57             : static int
      58           4 : mainloop_set_state(void *arg)
      59             : {
      60           4 :   const mainloop_state_t *state = arg;
      61           4 :   tor_assert(state->magic == MAINLOOP_STATE_MAGIC);
      62             : 
      63           4 :   netstatus_load_from_state(state, approx_time());
      64             : 
      65           4 :   return 0;
      66             : }
      67             : 
      68             : static int
      69           4 : mainloop_flush_state(void *arg)
      70             : {
      71           4 :   mainloop_state_t *state = arg;
      72           4 :   tor_assert(state->magic == MAINLOOP_STATE_MAGIC);
      73             : 
      74           4 :   netstatus_flush_to_state(state, approx_time());
      75             : 
      76           4 :   return 0;
      77             : }
      78             : 
      79             : const struct subsys_fns_t sys_mainloop = {
      80             :   .name = "mainloop",
      81             :   SUBSYS_DECLARE_LOCATION(),
      82             :   .supported = true,
      83             :   .level = 5,
      84             :   .initialize = subsys_mainloop_initialize,
      85             :   .shutdown = subsys_mainloop_shutdown,
      86             : 
      87             :   .state_format = &mainloop_state_fmt,
      88             :   .set_state = mainloop_set_state,
      89             :   .flush_state = mainloop_flush_state,
      90             : };

Generated by: LCOV version 1.14