the dreaded fork

This commit is contained in:
Marc Alexander Lehmann 2007-11-28 11:53:37 +00:00
parent 65c9e3cac2
commit 99c029b4a1
1 changed files with 37 additions and 0 deletions

37
ev.c
View File

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