diff options
author | root <root> | 2007-10-31 07:24:17 +0000 |
---|---|---|
committer | root <root> | 2007-10-31 07:24:17 +0000 |
commit | 6c9b968485dc8690f81ae6626c07a82a4e085eb1 (patch) | |
tree | 1f1fbd90c0dae4d9372fe50cdbe5668781720593 /ev.h | |
parent | eec85cf766fbaa1ee090c8daaf5b4a501f890f63 (diff) |
implement idle and check watchers, rmeove flawed hook system
Diffstat (limited to 'ev.h')
-rw-r--r-- | ev.h | 55 |
1 files changed, 37 insertions, 18 deletions
@@ -5,23 +5,26 @@ typedef double ev_tstamp; /* eventmask, revents, events... */ #define EV_UNDEF -1 /* guaranteed to be invalid */ -#define EV_NONE 0 -#define EV_READ 1 -#define EV_WRITE 2 -#define EV_TIMEOUT 4 -#define EV_SIGNAL 8 +#define EV_NONE 0x00 +#define EV_READ 0x01 +#define EV_WRITE 0x02 +#define EV_TIMEOUT 0x04 +#define EV_SIGNAL 0x08 +#define EV_IDLE 0x10 +#define EV_CHECK 0x20 /* shared by all watchers */ #define EV_WATCHER(type) \ int active; /* private */ \ int pending; /* private */ \ void *data; /* rw */ \ - void (*cb)(struct type *, int revents) /* rw */ + void (*cb)(struct type *, int revents) /* rw */ /* gets invoked with an eventmask */ #define EV_WATCHER_LIST(type) \ EV_WATCHER (type); \ struct type *next /* private */ +/* invoked at a specific time or after a specific time, repeatable */ struct ev_timer { EV_WATCHER_LIST (ev_timer); @@ -31,6 +34,7 @@ struct ev_timer unsigned char is_abs; /* ro */ }; +/* invoked when fd is either EV_READable or EV_WRITEable */ struct ev_io { EV_WATCHER_LIST (ev_io); @@ -39,6 +43,7 @@ struct ev_io int events; /* ro */ }; +/* invoked when the given signal has been received */ struct ev_signal { EV_WATCHER_LIST (ev_signal); @@ -46,12 +51,25 @@ struct ev_signal int signum; /* ro */ }; +/* invoked when the nothing else needs to be done, keeps the process from blocking */ +struct ev_idle +{ + EV_WATCHER (ev_idle); +}; + +/* invoked for each run of the mainloop, just before the next blocking vall is initiated */ +struct ev_check +{ + EV_WATCHER (ev_check); +}; + #define EVMETHOD_NONE 0 #define EVMETHOD_SELECT 1 #define EVMETHOD_EPOLL 2 -int ev_init (int flags); +int ev_init (int flags); /* returns ev_method */ extern int ev_method; +/* these three calls are suitable for plugging into pthread_atfork */ void ev_prefork (void); void ev_postfork_parent (void); void ev_postfork_child (void); @@ -64,13 +82,6 @@ ev_tstamp ev_time (void); void ev_loop (int flags); extern int ev_loop_done; /* set to 1 to break out of event loop */ -#define EVHOOK_PREPOLL 0 /* called before updating fds, timers and blocking */ -#define EVHOOK_POSTPOLL 1 /* called after blocking */ -#define EVHOOK_NUM 2 /* just the # of hooks */ -typedef void (*ev_hook)(void); -void ev_hook_register (int type, ev_hook hook); -void ev_hook_unregister (int type, ev_hook hook); - /* these may evaluate ev multiple times, and the other arguments at most once */ #define evw_init(ev,cb_,data_) do { (ev)->active = 0; (ev)->cb = (cb_); (ev)->data = (void *)data_; } while (0) @@ -81,14 +92,22 @@ void ev_hook_unregister (int type, ev_hook hook); #define ev_is_active(ev) (0 + (ev)->active) /* true when the watcher has been started */ -void evio_start (struct ev_io *w); -void evio_stop (struct ev_io *w); +/* stopping (enabling, adding) a watcher does nothing if it is already running */ +/* stopping (disabling, deleting) a watcher does nothing unless its already running */ +void evio_start (struct ev_io *w); +void evio_stop (struct ev_io *w); -void evtimer_start (struct ev_timer *w); -void evtimer_stop (struct ev_timer *w); +void evtimer_start (struct ev_timer *w); +void evtimer_stop (struct ev_timer *w); void evsignal_start (struct ev_signal *w); void evsignal_stop (struct ev_signal *w); +void evidle_start (struct ev_idle *w); +void evidle_stop (struct ev_idle *w); + +void evcheck_start (struct ev_check *w); +void evcheck_stop (struct ev_check *w); + #endif |