--- libev/ev.c 2008/09/08 17:24:39 1.260 +++ libev/ev.c 2008/09/29 03:31:14 1.261 @@ -2835,6 +2835,18 @@ } } +static void +embed_fork_cb (EV_P_ ev_fork *fork_w, int revents) +{ + ev_embed *w = (ev_embed *)(((char *)fork_w) - offsetof (ev_embed, fork)); + + { + struct ev_loop *loop = w->other; + + ev_loop_fork (EV_A); + } +} + #if 0 static void embed_idle_cb (EV_P_ ev_idle *idle, int revents) @@ -2864,6 +2876,9 @@ ev_set_priority (&w->prepare, EV_MINPRI); ev_prepare_start (EV_A_ &w->prepare); + ev_fork_init (&w->fork, embed_fork_cb); + ev_fork_start (EV_A_ &w->fork); + /*ev_idle_init (&w->idle, e,bed_idle_cb);*/ ev_start (EV_A_ (W)w, 1); @@ -2880,10 +2895,9 @@ EV_FREQUENT_CHECK; - ev_io_stop (EV_A_ &w->io); + ev_io_stop (EV_A_ &w->io); ev_prepare_stop (EV_A_ &w->prepare); - - ev_stop (EV_A_ (W)w); + ev_fork_stop (EV_A_ &w->fork); EV_FREQUENT_CHECK; }