X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fevent.h;h=cf3c70a163b531b331bef39a9b797d8cff53d875;hb=HEAD;hp=f2ebf4980085fb222804bad108a2c3705251664f;hpb=57f6341e91373198ad2a4099015f2988795d8a3f;p=meshlink diff --git a/src/event.h b/src/event.h index f2ebf498..6b53d919 100644 --- a/src/event.h +++ b/src/event.h @@ -28,11 +28,12 @@ #define IO_WRITE 2 typedef struct event_loop_t event_loop_t; +struct meshlink_handle; 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 timespec(*idle_cb_t)(event_loop_t *loop, void *data); typedef struct io_t { struct splay_node_t node; @@ -44,7 +45,7 @@ typedef struct io_t { typedef struct timeout_t { struct splay_node_t node; - struct timeval tv; + struct timespec tv; timeout_cb_t cb; void *data; } timeout_t; @@ -52,7 +53,9 @@ typedef struct timeout_t { typedef struct signal_t { struct splay_node_t node; int signum; - bool set; +#ifdef HAVE_STDATOMIC_H + volatile atomic_flag set; +#endif signal_cb_t cb; void *data; } signal_t; @@ -63,7 +66,7 @@ struct event_loop_t { volatile bool running; bool deletion; - struct timeval now; + struct timespec now; splay_tree_t timeouts; idle_cb_t idle_cb; @@ -78,25 +81,25 @@ struct event_loop_t { int pipefd[2]; }; -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); +void io_add(event_loop_t *loop, io_t *io, io_cb_t cb, void *data, int fd, int flags); +void io_del(event_loop_t *loop, io_t *io); +void io_set(event_loop_t *loop, io_t *io, int flags); -extern void timeout_add(event_loop_t *loop, timeout_t *timeout, timeout_cb_t cb, void *data, struct timeval *tv); -extern void timeout_del(event_loop_t *loop, timeout_t *timeout); -extern void timeout_set(event_loop_t *loop, timeout_t *timeout, struct timeval *tv); +void timeout_add(event_loop_t *loop, timeout_t *timeout, timeout_cb_t cb, void *data, struct timespec *tv); +void timeout_del(event_loop_t *loop, timeout_t *timeout); +void timeout_set(event_loop_t *loop, timeout_t *timeout, struct timespec *tv); -extern void signal_add(event_loop_t *loop, signal_t *sig, signal_cb_t cb, void *data, uint8_t signum); -extern void signal_trigger(event_loop_t *loop, signal_t *sig); -extern void signal_del(event_loop_t *loop, signal_t *sig); +void signal_add(event_loop_t *loop, signal_t *sig, signal_cb_t cb, void *data, uint8_t signum); +void signal_trigger(event_loop_t *loop, signal_t *sig); +void signal_del(event_loop_t *loop, signal_t *sig); -extern void idle_set(event_loop_t *loop, idle_cb_t cb, void *data); +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, pthread_mutex_t *mutex) __attribute__((__warn_unused_result__)); -extern void event_loop_flush_output(event_loop_t *loop); -extern void event_loop_start(event_loop_t *loop); -extern void event_loop_stop(event_loop_t *loop); +void event_loop_init(event_loop_t *loop); +void event_loop_exit(event_loop_t *loop); +bool event_loop_run(event_loop_t *loop, struct meshlink_handle *mesh) __attribute__((__warn_unused_result__)); +void event_loop_flush_output(event_loop_t *loop); +void event_loop_start(event_loop_t *loop); +void event_loop_stop(event_loop_t *loop); #endif