X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;ds=sidebyside;f=src%2Fevent.h;h=0b664e178c395262840598cc9e5906fc102a8a18;hb=53eb21510cf90c47f11d81a5b45a5f4d34d738f1;hp=3d49fe2d9b825e74e41d9c581b3b4891fd993290;hpb=93f89bcae11e8d250831896bc5694ee8bd2ad22b;p=meshlink diff --git a/src/event.h b/src/event.h index 3d49fe2d..0b664e17 100644 --- a/src/event.h +++ b/src/event.h @@ -17,10 +17,12 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef __TINC_EVENT_H__ -#define __TINC_EVENT_H__ +#ifndef __MESHLINK_EVENT_H__ +#define __MESHLINK_EVENT_H__ #include "splay_tree.h" +#include "system.h" +#include #define IO_READ 1 #define IO_WRITE 2 @@ -30,6 +32,7 @@ typedef struct event_loop_t event_loop_t; typedef void (*io_cb_t)(event_loop_t *loop, void *data, int flags); typedef void (*timeout_cb_t)(event_loop_t *loop, void *data); typedef void (*signal_cb_t)(event_loop_t *loop, void *data); +typedef struct timeval (*idle_cb_t)(event_loop_t *loop, void *data); typedef struct io_t { int fd; @@ -59,20 +62,21 @@ struct event_loop_t { volatile bool running; struct timeval now; + bool deletion; splay_tree_t ios; splay_tree_t timeouts; splay_tree_t signals; + idle_cb_t idle_cb; + void *idle_data; + io_t signalio; int pipefd[2]; void *data; }; -extern event_loop_t *loop; -extern struct timeval now; - extern void io_add(event_loop_t *loop, io_t *io, io_cb_t cb, void *data, int fd, int flags); extern void io_del(event_loop_t *loop, io_t *io); extern void io_set(event_loop_t *loop, io_t *io, int flags); @@ -85,9 +89,11 @@ extern void signal_add(event_loop_t *loop, signal_t *sig, signal_cb_t cb, void * extern void signal_trigger(event_loop_t *loop, signal_t *sig); extern void signal_del(event_loop_t *loop, signal_t *sig); +extern void idle_set(event_loop_t *loop, idle_cb_t cb, void *data); + extern void event_loop_init(event_loop_t *loop); extern void event_loop_exit(event_loop_t *loop); -extern bool event_loop_run(event_loop_t *loop); +extern bool event_loop_run(event_loop_t *loop, pthread_mutex_t *mutex); extern void event_loop_flush_output(event_loop_t *loop); extern void event_loop_stop(event_loop_t *loop);