From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Vladislav Shpilevoy Subject: [PATCH 08/11] coio: fix double close of a file descriptor Date: Fri, 30 Nov 2018 18:39:40 +0300 Message-Id: In-Reply-To: References: In-Reply-To: References: To: tarantool-patches@freelists.org Cc: vdavydov.dev@gmail.com List-ID: 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 575bae712..a888a54dd 100644 --- a/src/coio.cc +++ b/src/coio.cc @@ -605,9 +605,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]; @@ -619,9 +616,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)