summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root>2007-11-28 11:53:37 +0000
committerroot <root>2007-11-28 11:53:37 +0000
commite53306e99926168d590f09e39ec05ad229799811 (patch)
tree0f6f8ebf5494939b4ee4a176a34760b876f8fbf6
parent4e62f1267caf106a83789131419fc7d2853bcd4f (diff)
the dreaded fork
-rw-r--r--ev.c37
1 files changed, 37 insertions, 0 deletions
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