summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Renner Berthing <esmil@mailme.dk>2013-09-26 00:05:37 +0200
committerEmil Renner Berthing <esmil@mailme.dk>2016-01-07 17:38:43 +0100
commitc5dffb868f3f05943f2328243b797b3c93d018c3 (patch)
treeadde900d893100543a7245281110f923ac79ea0b
parent0e339a54b074c7ef5f5cc461c03aac634e92b731 (diff)
downloadlem-c5dffb868f3f05943f2328243b797b3c93d018c3.tar.gz
lem-c5dffb868f3f05943f2328243b797b3c93d018c3.tar.xz
lem-c5dffb868f3f05943f2328243b797b3c93d018c3.zip
io: interrupt streams on close
-rw-r--r--lem/io/stream.c12
1 files 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))