It looks like there's a bug in ev_loop_destroy(): when called for a non-default loop, it would stop the signal handler for SIGCHLD, even though the latter belongs to the default loop. The patched below should fix it.
--- /home/denis/work/libev-cvs/ev.c 2012-05-10 20:47:37.064383729 +0400 +++ libev/ev.c 2012-05-11 18:35:09.651798327 +0400 @@ -2356,7 +2356,7 @@ #endif #if EV_CHILD_ENABLE - if (ev_is_active (&childev)) + if (ev_default_loop_ptr == EV_A && ev_is_active (&childev)) { ev_ref (EV_A); /* child watcher */ ev_signal_stop (EV_A_ &childev); _______________________________________________ libev mailing list libev@lists.schmorp.de http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev