diff --git a/src/asio.m b/src/asio.m
index c0c9d428542d6cb4b3e3e820bca424a9f53f25fb..c5ed06da5715a1156f53eba0e8a5e240e68dc5e8 100644
--- a/src/asio.m
+++ b/src/asio.m
@@ -116,7 +116,6 @@ asio_init(void)
 	ev_async_start(&asio_mgr.asio_watcher);
 
 	eio_init(asio_poller, NULL);
-	return 0;
 }
 
 static inline void
diff --git a/src/tarantool.m b/src/tarantool.m
index c0ee8387ccf07b49f2576c71e856c21e9ae4078a..c522215450d939fc9e8a5d719ff601e753eab9bd 100644
--- a/src/tarantool.m
+++ b/src/tarantool.m
@@ -48,6 +48,7 @@
 #include <admin.h>
 #include <replication.h>
 #include <fiber.h>
+#include <asio.h>
 #include <iproto.h>
 #include <latch.h>
 #include <recovery.h>
@@ -592,6 +593,7 @@ tarantool_free(void)
 	destroy_tarantool_cfg(&cfg);
 
 	fiber_free();
+	asio_free();
 	palloc_free();
 	ev_default_destroy();
 #ifdef ENABLE_GCOV
@@ -608,6 +610,7 @@ initialize(double slab_alloc_arena, int slab_alloc_minimal, double slab_alloc_fa
 	if (!salloc_init(slab_alloc_arena * (1 << 30), slab_alloc_minimal, slab_alloc_factor))
 		panic_syserror("can't initialize slab allocator");
 	fiber_init();
+	asio_init();
 }
 
 static void