From 636fc6b08d05a55e24a7e7fc7df48d9563e085a2 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Mon, 3 Nov 2014 15:41:54 -0300 Subject: 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. --- src/nvim/msgpack_rpc/channel.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c index 10d180b3b7..c2d16d170f 100644 --- a/src/nvim/msgpack_rpc/channel.c +++ b/src/nvim/msgpack_rpc/channel.c @@ -600,11 +600,16 @@ static void close_channel(Channel *channel) if (handle) { uv_close(handle, close_cb); } 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) { pmap_del(uint64_t)(channels, channel->id); -- cgit