tor  0.4.0.1-alpha
Data Structures | Macros | Typedefs | Functions
compat_libevent.h File Reference
#include "orconfig.h"
#include "lib/testsupport/testsupport.h"
#include "lib/malloc/malloc.h"

Go to the source code of this file.

Data Structures

struct  tor_libevent_cfg
 

Macros

#define tor_event_new   event_new
 
#define tor_evtimer_new   evtimer_new
 
#define tor_evsignal_new   evsignal_new
 
#define tor_evdns_add_server_port(sock, tcp, cb, data)
 
#define tor_event_free(ev)   FREE_AND_NULL(struct event, tor_event_free_, (ev))
 
#define periodic_timer_free(t)   FREE_AND_NULL(periodic_timer_t, periodic_timer_free_, (t))
 
#define mainloop_event_free(event)   FREE_AND_NULL(mainloop_event_t, mainloop_event_free_, (event))
 

Typedefs

typedef struct periodic_timer_t periodic_timer_t
 
typedef struct mainloop_event_t mainloop_event_t
 
typedef struct tor_libevent_cfg tor_libevent_cfg
 

Functions

void configure_libevent_logging (void)
 
void suppress_libevent_log_msg (const char *msg)
 
void tor_event_free_ (struct event *ev)
 
periodic_timer_tperiodic_timer_new (struct event_base *base, const struct timeval *tv, void(*cb)(periodic_timer_t *timer, void *data), void *data)
 
void periodic_timer_free_ (periodic_timer_t *)
 
void periodic_timer_launch (periodic_timer_t *, const struct timeval *tv)
 
void periodic_timer_disable (periodic_timer_t *)
 
mainloop_event_tmainloop_event_new (void(*cb)(mainloop_event_t *, void *), void *userdata)
 
mainloop_event_tmainloop_event_postloop_new (void(*cb)(mainloop_event_t *, void *), void *userdata)
 
void mainloop_event_activate (mainloop_event_t *event)
 
int mainloop_event_schedule (mainloop_event_t *event, const struct timeval *delay)
 
void mainloop_event_cancel (mainloop_event_t *event)
 
void mainloop_event_free_ (mainloop_event_t *event)
 
void tor_libevent_initialize (tor_libevent_cfg *cfg)
 
 MOCK_DECL (struct event_base *, tor_libevent_get_base,(void))
 
const char * tor_libevent_get_method (void)
 
void tor_check_libevent_header_compatibility (void)
 
const char * tor_libevent_get_version_str (void)
 
const char * tor_libevent_get_header_version_str (void)
 
void tor_libevent_free_all (void)
 
int tor_init_libevent_rng (void)
 
int tor_libevent_run_event_loop (struct event_base *base, int once)
 
void tor_libevent_exit_loop_after_delay (struct event_base *base, const struct timeval *delay)
 
void tor_libevent_exit_loop_after_callback (struct event_base *base)
 

Detailed Description

Header for compat_libevent.c.

Definition in file compat_libevent.h.

Macro Definition Documentation

◆ tor_evdns_add_server_port

#define tor_evdns_add_server_port (   sock,
  tcp,
  cb,
  data 
)
Value:
evdns_add_server_port_with_base(tor_libevent_get_base(), \
(sock),(tcp),(cb),(data));

Definition at line 22 of file compat_libevent.h.

Typedef Documentation

◆ tor_libevent_cfg

Defines a configuration for using libevent with Tor: passed as an argument to tor_libevent_initialize() to describe how we want to set up.

Function Documentation

◆ configure_libevent_logging()

void configure_libevent_logging ( void  )

Set hook to intercept log messages from libevent.

Definition at line 58 of file compat_libevent.c.

References libevent_logging_callback().

Referenced by init_libevent().

◆ mainloop_event_activate()

void mainloop_event_activate ( mainloop_event_t event)

Schedule event to run in the main loop, immediately. If it is not scheduled, it will run anyway. If it is already scheduled to run later, it will run now instead. This function will have no effect if the event is already scheduled to run.

This function may only be called from the main thread.

Definition at line 415 of file compat_libevent.c.

References tor_assert().

Referenced by connection_start_reading_from_linked_conn(), control_event_logmsg_pending(), periodic_event_enable(), periodic_event_schedule_and_disable(), and scheduler_ev_active().

◆ mainloop_event_cancel()

void mainloop_event_cancel ( mainloop_event_t event)

Cancel event if it is currently active or pending. (Do nothing if the event is not currently active or pending.)

Definition at line 448 of file compat_libevent.c.

Referenced by periodic_event_disable().

◆ mainloop_event_free_()

void mainloop_event_free_ ( mainloop_event_t event)

Cancel event and release all storage associated with it.

Definition at line 457 of file compat_libevent.c.

◆ mainloop_event_new()

mainloop_event_t* mainloop_event_new ( void(*)(mainloop_event_t *, void *)  cb,
void *  userdata 
)

Create and return a new mainloop_event_t to run the function cb.

When run, the callback function will be passed the mainloop_event_t and userdata as its arguments. The userdata pointer must remain valid for as long as the mainloop_event_t event exists: it is your responsibility to free it.

The event is not scheduled by default: Use mainloop_event_activate() or mainloop_event_schedule() to make it run.

Definition at line 386 of file compat_libevent.c.

References mainloop_event_new_impl().

Referenced by mainloop_schedule_shutdown(), and reenable_blocked_connection_init().

◆ mainloop_event_postloop_new()

mainloop_event_t* mainloop_event_postloop_new ( void(*)(mainloop_event_t *, void *)  cb,
void *  userdata 
)

As mainloop_event_new(), but create a post-loop event.

A post-loop event behaves like any ordinary event, but any events that it activates cannot run until Libevent has checked for other events at least once.

Definition at line 400 of file compat_libevent.c.

References mainloop_event_new_impl().

Referenced by do_signewnym(), hibernate_schedule_wakeup_event(), and initialize_mainloop_events().

◆ mainloop_event_schedule()

int mainloop_event_schedule ( mainloop_event_t event,
const struct timeval tv 
)

Schedule event to run in the main loop, after a delay of tv.

If the event is scheduled for a different time, cancel it and run after this delay instead. If the event is currently pending to run now, has no effect.

Do not call this function with tv == NULL – use mainloop_event_activate() instead.

This function may only be called from the main thread.

Definition at line 433 of file compat_libevent.c.

References tor_assert().

Referenced by do_signewnym(), hibernate_schedule_wakeup_event(), mainloop_schedule_shutdown(), and periodic_event_set_interval().

◆ periodic_timer_disable()

void periodic_timer_disable ( periodic_timer_t timer)

Disable the provided timer, but do not free it.

You can reenable the same timer later with periodic_timer_launch.

If the timer is already disabled, this function does nothing.

Definition at line 283 of file compat_libevent.c.

References periodic_timer_t::ev, and tor_assert().

◆ periodic_timer_free_()

void periodic_timer_free_ ( periodic_timer_t timer)

Stop and free a periodic timer

Definition at line 291 of file compat_libevent.c.

◆ periodic_timer_launch()

void periodic_timer_launch ( periodic_timer_t timer,
const struct timeval tv 
)

Launch the timer timer to run at tv from now, and every tv thereafter.

If the timer is already enabled, this function does nothing.

Definition at line 267 of file compat_libevent.c.

References periodic_timer_t::ev, and tor_assert().

◆ periodic_timer_new()

periodic_timer_t* periodic_timer_new ( struct event_base *  base,
const struct timeval tv,
void(*)(periodic_timer_t *timer, void *data)  cb,
void *  data 
)

Create and schedule a new timer that will run every tv in the event loop of base. When the timer fires, it will run the timer in cb with the user-supplied data in data.

Definition at line 239 of file compat_libevent.c.

References periodic_timer_t::cb, and tor_assert().

Referenced by do_main_loop().

◆ suppress_libevent_log_msg()

void suppress_libevent_log_msg ( const char *  msg)

Ignore any libevent log message that contains msg.

Definition at line 65 of file compat_libevent.c.

References suppress_msg.

Referenced by init_libevent().

◆ tor_libevent_exit_loop_after_callback()

void tor_libevent_exit_loop_after_callback ( struct event_base *  base)

Tell the event loop to exit after running whichever callback is currently active.

Definition at line 521 of file compat_libevent.c.

◆ tor_libevent_exit_loop_after_delay()

void tor_libevent_exit_loop_after_delay ( struct event_base *  base,
const struct timeval delay 
)

Tell the event loop to exit after delay. If delay is NULL, instead exit after we're done running the currently active events.

Definition at line 512 of file compat_libevent.c.

◆ tor_libevent_free_all()

void tor_libevent_free_all ( void  )

Un-initialize libevent in preparation for an exit

Definition at line 486 of file compat_libevent.c.

◆ tor_libevent_get_header_version_str()

const char* tor_libevent_get_header_version_str ( void  )

Return a string representation of the version of Libevent that was used at compilation time.

Definition at line 210 of file compat_libevent.c.

Referenced by options_init_from_torrc().

◆ tor_libevent_get_method()

const char* tor_libevent_get_method ( void  )

Return the name of the Libevent backend we're using.

Definition at line 194 of file compat_libevent.c.

References the_event_base.

◆ tor_libevent_get_version_str()

const char* tor_libevent_get_version_str ( void  )

Return a string representation of the version of the currently running version of Libevent.

Definition at line 202 of file compat_libevent.c.

Referenced by options_init_from_torrc().

◆ tor_libevent_initialize()

void tor_libevent_initialize ( tor_libevent_cfg torcfg)

Initialize the Libevent library and set up the event base.

Definition at line 133 of file compat_libevent.c.

References tor_libevent_cfg::num_cpus, the_event_base, and tor_assert().

Referenced by init_libevent().

◆ tor_libevent_run_event_loop()

int tor_libevent_run_event_loop ( struct event_base *  base,
int  once 
)

Run the event loop for the provided event_base, handling events until something stops it. If once is set, then just poll-and-run once, then exit. Return 0 on success, -1 if an error occurred, or 1 if we exited because no events were pending or active.

This isn't reentrant or multithreaded.

Definition at line 503 of file compat_libevent.c.