diff options
| -rw-r--r-- | ev.c | 108 | ||||
| -rw-r--r-- | ev.h | 8 | ||||
| -rw-r--r-- | ev_win32.c | 2 | 
3 files changed, 117 insertions, 1 deletions
@@ -3148,6 +3148,114 @@ ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, vo      }  } +/*****************************************************************************/ + +#if 0 +void +ev_walk (EV_P_ int types, void (*cb)(EV_P_ int type, void *w)) +{ +  int i, j; +  ev_watcher_list *wl, *wn; + +  if (types & (EV_IO | EV_EMBED)) +    for (i = 0; i < anfdmax; ++i) +      for (wl = anfds [i].head; wl; ) +        { +          wn = wl->next; + +#if EV_EMBED_ENABLE +          if (ev_cb ((ev_io *)wl) == embed_io_cb) +            { +              if (types & EV_EMBED) +                cb (EV_A_ EV_EMBED, ((char *)wl) - offsetof (struct ev_embed, io)); +            } +          else +#endif +#if EV_USE_INOTIFY +          if (ev_cb ((ev_io *)wl) == infy_cb) +            ; +          else +#endif +          if ((ev_io *)wl != &pipeev) +            if (types & EV_IO) +              cb (EV_A_ EV_IO, wl); + +          wl = wn; +        } + +  if (types & (EV_TIMER | EV_STAT)) +    for (i = timercnt + HEAP0; i-- > HEAP0; ) +#if EV_STAT_ENABLE +      /*TODO: timer is not always active*/ +      if (ev_cb ((ev_timer *)ANHE_w (timers [i])) == stat_timer_cb) +        { +          if (types & EV_STAT) +            cb (EV_A_ EV_STAT, ((char *)ANHE_w (timers [i])) - offsetof (struct ev_stat, timer)); +        } +      else +#endif +      if (types & EV_TIMER) +        cb (EV_A_ EV_TIMER, ANHE_w (timers [i])); + +#if EV_PERIODIC_ENABLE +  if (types & EV_PERIODIC) +    for (i = periodiccnt + HEAP0; i-- > HEAP0; ) +      cb (EV_A_ EV_PERIODIC, ANHE_w (periodics [i])); +#endif + +#if EV_IDLE_ENABLE +  if (types & EV_IDLE) +    for (j = NUMPRI; i--; ) +      for (i = idlecnt [j]; i--; ) +        cb (EV_A_ EV_IDLE, idles [j][i]); +#endif + +#if EV_FORK_ENABLE +  if (types & EV_FORK) +    for (i = forkcnt; i--; ) +      if (ev_cb (forks [i]) != embed_fork_cb) +        cb (EV_A_ EV_FORK, forks [i]); +#endif + +#if EV_ASYNC_ENABLE +  if (types & EV_ASYNC) +    for (i = asynccnt; i--; ) +      cb (EV_A_ EV_ASYNC, asyncs [i]); +#endif + +  if (types & EV_PREPARE) +    for (i = preparecnt; i--; ) +#if EV_EMBED_ENABLE +      if (ev_cb (prepares [i]) != embed_prepare_cb) +#endif +        cb (EV_A_ EV_PREPARE, prepares [i]); + +  if (types & EV_CHECK) +    for (i = checkcnt; i--; ) +      cb (EV_A_ EV_CHECK, checks [i]); + +  if (types & EV_SIGNAL) +    for (i = 0; i < signalmax; ++i) +      for (wl = signals [i].head; wl; ) +        { +          wn = wl->next; +          cb (EV_A_ EV_SIGNAL, wl); +          wl = wn; +        } + +  if (types & EV_CHILD) +    for (i = EV_PID_HASHSIZE; i--; ) +      for (wl = childs [i]; wl; ) +        { +          wn = wl->next; +          cb (EV_A_ EV_CHILD, wl); +          wl = wn; +        } +/* EV_STAT     0x00001000 /* stat data changed */ +/* EV_EMBED    0x00010000 /* embedded event loop needs sweep */ +} +#endif +  #if EV_MULTIPLICITY    #include "ev_wrap.h"  #endif @@ -136,6 +136,7 @@ struct ev_loop;  #define EV__IOFDSET       0x80 /* internal use only */  #define EV_IO          EV_READ /* alias for type-detection */  #define EV_TIMEOUT  0x00000100 /* timer timed out */ +#define EV_TIMER    EV_TIMEOUT /* alias for type-detection */  #define EV_PERIODIC 0x00000200 /* periodic timer timed out */  #define EV_SIGNAL   0x00000400 /* signal was received */  #define EV_CHILD    0x00000800 /* child/pid had status change */ @@ -492,6 +493,13 @@ void ev_default_destroy (void); /* destroy the default loop */  /* you can actually call it at any time, anywhere :) */  void ev_default_fork (void); +#if 0 +/* walk (almost) all watchers in the loop of a given type, invoking the */ +/* callback on every such watcher. The callback might stop the watcher, */ +/* but do nothing else with the loop */ +void ev_walk (EV_P_ int types, void (*cb)(EV_P_ int type, void *w)); +#endif +  unsigned int ev_backend (EV_P);    /* backend in use by loop */  unsigned int ev_loop_count (EV_P); /* number of loop iterations */  #endif /* prototypes */ @@ -1,7 +1,7 @@  /*   * libev win32 compatibility cruft (_not_ a backend)   * - * Copyright (c) 2007,2008 Marc Alexander Lehmann <libev@schmorp.de> + * Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without modifica-  | 
