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; }