From 2e4f855ad17fd958d1643d2170054734053033fc Mon Sep 17 00:00:00 2001 From: root Date: Tue, 27 Nov 2007 10:59:10 +0000 Subject: docs --- ev.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'ev.c') diff --git a/ev.c b/ev.c index 40e2292..bf20d1a 100644 --- a/ev.c +++ b/ev.c @@ -1278,6 +1278,14 @@ ev_loop (EV_P_ int flags) while (activecnt) { + /* we might have forked, so reify kernel state if necessary */ + if (expect_false (postfork)) + if (forkcnt) + { + queue_events (EV_A_ (W *)forks, forkcnt, EV_FORK); + call_pending (EV_A); + } + /* queue check watchers (and execute them) */ if (expect_false (preparecnt)) { @@ -1829,6 +1837,35 @@ ev_embed_stop (EV_P_ ev_embed *w) } #endif +#if EV_FORK_ENABLE +void +ev_fork_start (EV_P_ ev_fork *w) +{ + if (expect_false (ev_is_active (w))) + return; + + ev_start (EV_A_ (W)w, ++forkcnt); + array_needsize (ev_fork *, forks, forkmax, forkcnt, EMPTY2); + forks [forkcnt - 1] = w; +} + +void +ev_fork_stop (EV_P_ ev_fork *w) +{ + ev_clear_pending (EV_A_ (W)w); + if (expect_false (!ev_is_active (w))) + return; + + { + int active = ((W)w)->active; + forks [active - 1] = forks [--forkcnt]; + ((W)forks [active - 1])->active = active; + } + + ev_stop (EV_A_ (W)w); +} +#endif + /*****************************************************************************/ struct ev_once -- cgit v1.2.3