channel: Move mch_exit(0) call to a non-deferred event handler

Since `mch_exit` will re-enter event_poll, it is necessary to call it outside
libuv event loop.
This commit is contained in:
Thiago de Arruda
2014-11-03 15:41:54 -03:00
parent 74b9f33a95
commit 636fc6b08d

View File

@@ -600,11 +600,16 @@ static void close_channel(Channel *channel)
if (handle) { if (handle) {
uv_close(handle, close_cb); uv_close(handle, close_cb);
} else { } else {
mch_exit(0); event_push((Event) { .handler = on_stdio_close }, false);
} }
} }
} }
static void on_stdio_close(Event e)
{
mch_exit(0);
}
static void free_channel(Channel *channel) static void free_channel(Channel *channel)
{ {
pmap_del(uint64_t)(channels, channel->id); pmap_del(uint64_t)(channels, channel->id);