From: Vladimir Davydov <vdavydov.dev@gmail.com>
To: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
Cc: tarantool-patches@freelists.org
Subject: Re: [PATCH 07/11] coio: fix file descriptor leak on accept
Date: Mon, 3 Dec 2018 19:16:58 +0300 [thread overview]
Message-ID: <20181203161658.mvag6vbepsurq6zk@esperanza> (raw)
In-Reply-To: <b737a7acc6118928dd9e3c2fff681a5243836243.1543590433.git.v.shpilevoy@tarantool.org>
On Fri, Nov 30, 2018 at 06:39:39PM +0300, Vladislav Shpilevoy wrote:
> @@ -90,44 +92,46 @@ evio_setsockopt_keepalive(int fd)
> */
> int keepcnt = 5;
> if (sio_setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &keepcnt,
> - sizeof(int)))
> - diag_raise();
> + sizeof(int)) != 0)
> + return -1;
> int keepidle = 30;
>
> if (sio_setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle,
> - sizeof(int)))
> - diag_raise();
> + sizeof(int)) != 0)
> + return -1;
>
> int keepintvl = 60;
> if (sio_setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &keepintvl,
> - sizeof(int)))
> - diag_raise();
> + sizeof(int)) != 0)
> + return -1;
> #endif
> + return 0;
> }
>
> /** Set common client socket options. */
> -void
> +int
> evio_setsockopt_client(int fd, int family, int type)
> {
> int on = 1;
> - /* In case this throws, the socket is not leaked. */
> if (sio_setfl(fd, O_NONBLOCK) != 0)
> - diag_raise();
> + return -1;
> if (type == SOCK_STREAM && family != AF_UNIX) {
> /*
> * SO_KEEPALIVE to ensure connections don't hang
> * around for too long when a link goes away.
> */
> - evio_setsockopt_keepalive(fd);
> + if (evio_setsockopt_keepalive(fd) != 0)
> + return -1;
> /*
> * Lower latency is more important than higher
> * bandwidth, and we usually write entire
> * request/response in a single syscall.
> */
> if (sio_setsockopt(fd, IPPROTO_TCP, TCP_NODELAY,
> - &on, sizeof(on)))
> - diag_raise();
> + &on, sizeof(on)) != 0)
> + return -1;
> }
> + return 0;
> }
>
> /** Set options for server sockets. */
> @@ -150,8 +154,9 @@ evio_setsockopt_server(int fd, int family, int type)
> if (sio_setsockopt(fd, SOL_SOCKET, SO_LINGER,
> &linger, sizeof(linger)))
> diag_raise();
> - if (type == SOCK_STREAM && family != AF_UNIX)
> - evio_setsockopt_keepalive(fd);
> + if (type == SOCK_STREAM && family != AF_UNIX &&
> + evio_setsockopt_keepalive(fd) != 0)
> + diag_raise();
> }
I don't like this patch, because apart from fixing the leak, it also
removes exceptions from some evio functions, but not all of them, e.g.
evio_setsockopt_keepalive and evio_setsockopt_client are now exception
free while evio_setsockopt_server is not. And then you have a separate
patch that removes the rest of exception from evio.
Let's please first remove all exceptions from evio in one go, and only
then fix the leak?
next prev parent reply other threads:[~2018-12-03 16:16 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-30 15:39 [PATCH 00/11] SWIM preparation Vladislav Shpilevoy
2018-11-30 15:39 ` [PATCH 01/11] box: move info_handler interface into src/info Vladislav Shpilevoy
2018-12-03 11:05 ` Vladimir Davydov
2018-12-03 21:48 ` [tarantool-patches] " Vladislav Shpilevoy
2018-12-03 20:41 ` [tarantool-patches] " Konstantin Osipov
2018-12-03 21:48 ` [tarantool-patches] " Vladislav Shpilevoy
2018-12-04 8:52 ` Vladimir Davydov
2018-11-30 15:39 ` [PATCH 10/11] evio: remove exceptions Vladislav Shpilevoy
2018-11-30 15:39 ` [PATCH 11/11] evio: turn into C Vladislav Shpilevoy
2018-11-30 15:39 ` [PATCH 02/11] sio: remove unused functions, restyle code Vladislav Shpilevoy
2018-12-03 12:28 ` Vladimir Davydov
2018-12-04 21:29 ` [tarantool-patches] " Vladislav Shpilevoy
2018-12-05 8:41 ` Vladimir Davydov
2018-11-30 15:39 ` [PATCH 03/11] sio: remove exceptions Vladislav Shpilevoy
2018-12-03 12:36 ` Vladimir Davydov
2018-12-04 21:29 ` [tarantool-patches] " Vladislav Shpilevoy
2018-12-05 8:42 ` Vladimir Davydov
2018-11-30 15:39 ` [PATCH 04/11] sio: fix passing negative size_t to sio_add_to_iov Vladislav Shpilevoy
2018-12-03 13:50 ` Vladimir Davydov
2018-12-04 21:29 ` Vladislav Shpilevoy
2018-12-05 8:48 ` Vladimir Davydov
2018-11-30 15:39 ` [PATCH 05/11] sio: turn into C Vladislav Shpilevoy
2018-11-30 15:39 ` [PATCH 06/11] evio: make on_accept be nothrow Vladislav Shpilevoy
2018-12-03 14:58 ` Vladimir Davydov
2018-12-04 21:29 ` [tarantool-patches] " Vladislav Shpilevoy
2018-12-05 8:52 ` Vladimir Davydov
2018-11-30 15:39 ` [PATCH 07/11] coio: fix file descriptor leak on accept Vladislav Shpilevoy
2018-12-03 16:16 ` Vladimir Davydov [this message]
2018-12-04 21:29 ` [tarantool-patches] " Vladislav Shpilevoy
2018-11-30 15:39 ` [PATCH 08/11] coio: fix double close of a file descriptor Vladislav Shpilevoy
2018-12-03 16:19 ` Vladimir Davydov
2018-12-04 21:29 ` [tarantool-patches] " Vladislav Shpilevoy
2018-11-30 15:39 ` [PATCH 09/11] evio: refactoring Vladislav Shpilevoy
2018-12-03 16:37 ` Vladimir Davydov
2018-12-04 21:29 ` [tarantool-patches] " Vladislav Shpilevoy
2018-12-03 9:47 ` [PATCH 00/11] SWIM preparation Vladimir Davydov
2018-12-03 10:27 ` [tarantool-patches] " Vladislav Shpilevoy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181203161658.mvag6vbepsurq6zk@esperanza \
--to=vdavydov.dev@gmail.com \
--cc=tarantool-patches@freelists.org \
--cc=v.shpilevoy@tarantool.org \
--subject='Re: [PATCH 07/11] coio: fix file descriptor leak on accept' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox