diff options
| -rw-r--r-- | Changes | 3 | ||||
| -rw-r--r-- | ev.c | 8 | 
2 files changed, 8 insertions, 3 deletions
| @@ -1,5 +1,7 @@  Revision history for libev, a high-performance and full-featured event loop. +        - fix a bug where an inotify watcher was added twice, causing +          freezes on hash collisions.  	- new config symbol, EV_USE_CLOCK_SYSCALL, to make libev use            a direct syscall - slower, but no dependency on librt et al.          - assume negative return values != -1 signals success of port_getn @@ -10,6 +12,7 @@ Revision history for libev, a high-performance and full-featured event loop.          - fixed const object callbacks in ev++.h.          - replaced loop_ref argument of watcher.set (loop) by a direct            ev_loop * in ev++.h, to avoid clashes with functor patch. +        - do not try to watch the empty string via inotify.  3.49 Wed Nov 19 11:26:53 CET 2008  	- ev_stat watchers will now use inotify as a mere hint on @@ -2480,8 +2480,8 @@ infy_add (EV_P_ ev_stat *w)                char *pend = strrchr (path, '/'); -              if (!pend) -                break; /* whoops, no '/', complain to your admin */ +              if (!pend || pend == path) +                break;                *pend = 0;                w->wd = inotify_add_watch (fs_fd, path, mask); @@ -2489,7 +2489,8 @@ infy_add (EV_P_ ev_stat *w)            while (w->wd < 0 && (errno == ENOENT || errno == EACCES));          }      } -  else + +  if (w->wd >= 0)      {        wlist_add (&fs_hash [w->wd & (EV_INOTIFY_HASHSIZE - 1)].head, (WL)w); @@ -2549,6 +2550,7 @@ infy_wd (EV_P_ int slot, int wd, struct inotify_event *ev)              {                if (ev->mask & (IN_IGNORED | IN_UNMOUNT | IN_DELETE_SELF))                  { +                  wlist_del (&fs_hash [slot & (EV_INOTIFY_HASHSIZE - 1)].head, (WL)w);                    w->wd = -1;                    infy_add (EV_A_ w); /* re-add, no matter what */                  } | 
