Browse Source

infy fix

master
Marc Alexander Lehmann 12 years ago
parent
commit
cfc0ba5dcc
2 changed files with 8 additions and 3 deletions
  1. +3
    -0
      Changes
  2. +5
    -3
      ev.c

+ 3
- 0
Changes View File

@ -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


+ 5
- 3
ev.c View File

@ -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 */
}


Loading…
Cancel
Save