[PATCH v2 07/11] coio: fix double close of a file descriptor
Vladislav Shpilevoy
v.shpilevoy at tarantool.org
Wed Dec 5 00:28:54 MSK 2018
coio_service_on_accept is called by evio by an
on_accept pointer. If evio obtains not zero from
on_accept pointer, it closes accepted socket. But
coio_service_on_accept closes it too, when fiber_new
fails. It is double close.
Note that the bug existed even when on_accept was able
to throw.
---
src/coio.cc | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/coio.cc b/src/coio.cc
index 9b9c71c79..355c7a42e 100644
--- a/src/coio.cc
+++ b/src/coio.cc
@@ -595,9 +595,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];
@@ -609,9 +606,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.
--
2.17.2 (Apple Git-113)
More information about the Tarantool-patches
mailing list