From f64d79f36516f987328ebc7f07328efb8310846f Mon Sep 17 00:00:00 2001 From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Date: Tue, 4 Dec 2018 23:40:19 +0300 Subject: [PATCH] coio: fix file descriptor leak on accept coio_accept() calls evio_setsockopt_client, which throws an exception and just accepted socket leaks. Yes, server socket is protected, but not new client socket. The bug existed even before exceptions are removed from evio. --- src/coio.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/coio.cc b/src/coio.cc index 4c9a885d2d..6b94cf2a65 100644 --- a/src/coio.cc +++ b/src/coio.cc @@ -257,8 +257,10 @@ coio_accept(struct ev_io *coio, struct sockaddr *addr, int fd = sio_accept(coio->fd, addr, &addrlen); if (fd >= 0) { if (evio_setsockopt_client(fd, addr->sa_family, - SOCK_STREAM) != 0) + SOCK_STREAM) != 0) { + close(fd); diag_raise(); + } return fd; } if (! sio_wouldblock(errno)) -- GitLab