diff --git a/src/coio.cc b/src/coio.cc
index 46333e01a67b62a3e2e310ead8470683a036b8ae..7bd73a86e9dcf46c3d59ce0e97131e5f48234e59 100644
--- a/src/coio.cc
+++ b/src/coio.cc
@@ -596,9 +596,6 @@ coio_service_on_accept(struct evio_service *evio_service,
 {
 	struct coio_service *service = (struct coio_service *)
 			evio_service->on_accept_param;
-	struct ev_io coio;
-
-	coio_create(&coio, fd);
 
 	/* Set connection name. */
 	char fiber_name[SERVICE_NAME_MAXLEN];
@@ -610,9 +607,10 @@ coio_service_on_accept(struct evio_service *evio_service,
 	if (f == NULL) {
 		diag_log();
 		say_error("can't create a handler fiber, dropping client connection");
-		evio_close(loop(), &coio);
 		return -1;
 	}
+	struct ev_io coio;
+	coio_create(&coio, fd);
 	/*
 	 * The coio is passed into the created fiber, reset the
 	 * libev callback param to point at it.