From e53306e99926168d590f09e39ec05ad229799811 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 28 Nov 2007 11:53:37 +0000 Subject: the dreaded fork --- ev.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/ev.c b/ev.c index ab89221..f8b08f5 100644 --- a/ev.c +++ b/ev.c @@ -987,6 +987,8 @@ loop_destroy (EV_P) backend = 0; } +void inline_size infy_fork (EV_P); + void inline_size loop_fork (EV_P) { @@ -999,6 +1001,9 @@ loop_fork (EV_P) #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 @@ infy_init (EV_P) } } +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 -- cgit v1.2.3