From c5dffb868f3f05943f2328243b797b3c93d018c3 Mon Sep 17 00:00:00 2001 From: Emil Renner Berthing Date: Thu, 26 Sep 2013 00:05:37 +0200 Subject: io: interrupt streams on close --- lem/io/stream.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lem/io/stream.c b/lem/io/stream.c index 610567e..a8ab4d2 100644 --- a/lem/io/stream.c +++ b/lem/io/stream.c @@ -91,8 +91,16 @@ stream_close(lua_State *T) s = lua_touserdata(T, 1); if (!s->open) return io_closed(T); - if (s->r.data != NULL || s->w.data != NULL) - return io_busy(T); + if (s->r.data != NULL) { + ev_io_stop(LEM_ &s->r); + lem_queue(s->r.data, io_closed(s->r.data)); + s->r.data = NULL; + } + if (s->w.data != NULL) { + ev_io_stop(LEM_ &s->w); + lem_queue(s->w.data, io_closed(s->w.data)); + s->w.data = NULL; + } s->open = 0; if (close(s->r.fd)) -- cgit v1.2.1