diff options
| -rw-r--r-- | ev.h | 30 | 
1 files changed, 28 insertions, 2 deletions
| @@ -100,7 +100,11 @@ EV_CPP(extern "C" {)  #endif  #ifndef EV_FORK_ENABLE -# define EV_FORK_ENABLE EV_FEATURE_WATCHERS +# define EV_FORK_ENABLE 0 /* not implemented */ +#endif + +#ifndef EV_CLEANUP_ENABLE +# define EV_CLEANUP_ENABLE EV_FEATURE_WATCHERS  #endif  #ifndef EV_SIGNAL_ENABLE @@ -212,7 +216,8 @@ enum {    EV_CHECK    = 0x00008000, /* event loop finished poll */    EV_EMBED    = 0x00010000, /* embedded event loop needs sweep */    EV_FORK     = 0x00020000, /* event loop resumed in child */ -  EV_ASYNC    = 0x00040000, /* async intra-loop signal */ +  EV_CLEANUP  = 0x00040000, /* event loop resumed in child */ +  EV_ASYNC    = 0x00080000, /* async intra-loop signal */    EV_CUSTOM   = 0x01000000, /* for use by user code */    EV_ERROR    = 0x80000000  /* sent when an error occurs */  }; @@ -391,12 +396,22 @@ typedef struct ev_check  #if EV_FORK_ENABLE  /* the callback gets invoked before check in the child process when a fork was detected */ +/* revent EV_FORK */  typedef struct ev_fork  {    EV_WATCHER (ev_fork)  } ev_fork;  #endif +#if EV_CLEANUP_ENABLE +/* is invoked just before the loop gets destroyed */ +/* revent EV_CLEANUP */ +typedef struct ev_cleanup +{ +  EV_WATCHER (ev_cleanup) +} ev_cleanup; +#endif +  #if EV_EMBED_ENABLE  /* used to embed an event loop inside another */  /* the callback gets invoked when the event loop has handled events, and can be 0 */ @@ -412,6 +427,7 @@ typedef struct ev_embed    ev_periodic periodic;  /* unused */    ev_idle idle;          /* unused */    ev_fork fork;          /* private */ +  ev_cleanup cleanup;    /* unused */  } ev_embed;  #endif @@ -450,6 +466,9 @@ union ev_any_watcher  #if EV_FORK_ENABLE    struct ev_fork fork;  #endif +#if EV_CLEANUP_ENABLE +  struct ev_cleanup cleanup; +#endif  #if EV_EMBED_ENABLE    struct ev_embed embed;  #endif @@ -653,6 +672,7 @@ void ev_resume  (EV_P);  #define ev_check_set(ev)                     /* nop, yes, this is a serious in-joke */  #define ev_embed_set(ev,other_)              do { (ev)->other = (other_); } while (0)  #define ev_fork_set(ev)                      /* nop, yes, this is a serious in-joke */ +#define ev_cleanup_set(ev)                   /* nop, yes, this is a serious in-joke */  #define ev_async_set(ev)                     /* nop, yes, this is a serious in-joke */  #define ev_io_init(ev,cb,fd,events)          do { ev_init ((ev), (cb)); ev_io_set ((ev),(fd),(events)); } while (0) @@ -666,6 +686,7 @@ void ev_resume  (EV_P);  #define ev_check_init(ev,cb)                 do { ev_init ((ev), (cb)); ev_check_set ((ev)); } while (0)  #define ev_embed_init(ev,cb,other)           do { ev_init ((ev), (cb)); ev_embed_set ((ev),(other)); } while (0)  #define ev_fork_init(ev,cb)                  do { ev_init ((ev), (cb)); ev_fork_set ((ev)); } while (0) +#define ev_cleanup_init(ev,cb)               do { ev_init ((ev), (cb)); ev_cleanup_set ((ev)); } while (0)  #define ev_async_init(ev,cb)                 do { ev_init ((ev), (cb)); ev_async_set ((ev)); } while (0)  #define ev_is_pending(ev)                    (0 + ((ev_watcher *)(void *)(ev))->pending) /* ro, true when watcher is waiting for callback invocation */ @@ -755,6 +776,11 @@ void ev_fork_start     (EV_P_ ev_fork *w);  void ev_fork_stop      (EV_P_ ev_fork *w);  # endif +# if EV_CLEANUP_ENABLE +void ev_cleanup_start  (EV_P_ ev_cleanup *w); +void ev_cleanup_stop   (EV_P_ ev_cleanup *w); +# endif +  # if EV_EMBED_ENABLE  /* only supported when loop to be embedded is in fact embeddable */  void ev_embed_start    (EV_P_ ev_embed *w); | 
