--- libev/ev.c 2007/11/28 11:41:18 1.153 +++ libev/ev.c 2007/11/28 11:53:37 1.154 @@ -987,6 +987,8 @@ backend = 0; } +void inline_size infy_fork (EV_P); + void inline_size loop_fork (EV_P) { @@ -999,6 +1001,9 @@ #if EV_USE_EPOLL if (backend == EVBACKEND_EPOLL ) epoll_fork (EV_A); #endif +#if EV_USE_INOTIFY + infy_fork (EV_A); +#endif if (ev_is_active (&sigev)) { @@ -1833,6 +1838,38 @@ } } +void inline_size +infy_fork (EV_P) +{ + int slot; + + if (fs_fd < 0) + return; + + close (fs_fd); + fs_fd = inotify_init (); + + for (slot = 0; slot < EV_INOTIFY_HASHSIZE; ++slot) + { + WL w_ = fs_hash [slot].head; + fs_hash [slot].head = 0; + + while (w_) + { + ev_stat *w = (ev_stat *)w_; + w_ = w_->next; /* lets us add this watcher */ + + w->wd = -1; + + if (fs_fd >= 0) + infy_add (EV_A_ w); /* re-add, no matter what */ + else + ev_timer_start (EV_A_ &w->timer); + } + + } +} + #endif void