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  | 
