diff --git a/core/fiber.m b/core/fiber.m
index 0d987b86b8b99021f90999888306254766d0c2cf..6a1d732010875ca3cc4c4de760246404740cdcb2 100644
--- a/core/fiber.m
+++ b/core/fiber.m
@@ -1062,6 +1062,7 @@ spawn_child(const char *name, int inbox_size, struct tbuf *(*handler) (void *, s
 		/* it is safier to tell libev about fork, even
 		 * if child wont' use it. */
 		ev_default_fork();
+		ev_loop(EVLOOP_NONBLOCK);
 
 		char child_name[sizeof(fiber->name)];
 		/*
diff --git a/core/replication.m b/core/replication.m
index f0d1a47b91553396c99dde0f59e25d14917d82eb..693fa4b41ccab41473d6357f0c018626b14fa53a 100644
--- a/core/replication.m
+++ b/core/replication.m
@@ -186,6 +186,7 @@ replication_prefork()
 			panic("set_nonblock");
 	} else {
 		ev_default_fork();
+		ev_loop(EVLOOP_NONBLOCK);
 		/* child process: spawner */
 		close(sockpair[0]);
 		/*
@@ -453,6 +454,7 @@ spawner_create_replication_relay(int client_sock)
 
 	if (pid == 0) {
 		ev_default_fork();
+		ev_loop(EVLOOP_NONBLOCK);
 		close(spawner.sock);
 		replication_relay_loop(client_sock);
 	} else {