From b28c02d16db3b6afd5859df2746c4733c4ac505e Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko Date: Wed, 12 Apr 2017 15:33:34 +0300 Subject: [PATCH] machinarium: detach fd from event loop during close and connect --- src/mm_close.c | 10 ++++++++-- src/mm_connect.c | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/mm_close.c b/src/mm_close.c index 079ce7e8..20f35956 100644 --- a/src/mm_close.c +++ b/src/mm_close.c @@ -75,12 +75,18 @@ MACHINE_API int machine_close(machine_io_t obj) { mm_io_t *io = obj; - /*mm_io_read_stop(io);*/ + mm_t *machine = machine = io->machine; if (io->fd == -1) { mm_io_set_errno(io, EBADF); return -1; } - close(io->fd); + int rc; + rc = mm_loop_delete(&machine->loop, &io->handle); + if (rc == -1) + mm_io_set_errno(io, errno); + rc = close(io->fd); + if (rc == -1) + mm_io_set_errno(io, errno); io->connected = 0; io->fd = -1; io->handle.fd = -1; diff --git a/src/mm_connect.c b/src/mm_connect.c index 49dcc06e..6c0d7331 100644 --- a/src/mm_connect.c +++ b/src/mm_connect.c @@ -109,6 +109,7 @@ mm_connect(mm_io_t *io, struct sockaddr *sa, uint64_t time_ms) rc = io->connect_status; if (rc != 0) { + mm_loop_delete(&machine->loop, &io->handle); mm_io_set_errno(io, rc); goto error; }