diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2020-12-15 10:15:51 +0100 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2020-12-23 23:58:56 +0100 |
commit | 95352f490a24f5e3a1cc788d297105e4eadf1481 (patch) | |
tree | e1df3123527756ee6f67f80b81ce333618126bf5 /src | |
parent | d0668b36a3e2d0683059baead45bea27e2358e9c (diff) | |
download | rneovim-95352f490a24f5e3a1cc788d297105e4eadf1481.tar.gz rneovim-95352f490a24f5e3a1cc788d297105e4eadf1481.tar.bz2 rneovim-95352f490a24f5e3a1cc788d297105e4eadf1481.zip |
rpc: don't handle stale requests on already closed channel
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/msgpack_rpc/channel.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c index 68ef4cd41e..a0b439ac45 100644 --- a/src/nvim/msgpack_rpc/channel.c +++ b/src/nvim/msgpack_rpc/channel.c @@ -377,6 +377,10 @@ static void request_event(void **argv) Channel *channel = e->channel; MsgpackRpcRequestHandler handler = e->handler; Error error = ERROR_INIT; + if (channel->rpc.closed) { + // channel was closed, abort any pending requests + goto free_ret; + } Object result = handler.fn(channel->id, e->args, &error); if (e->type == kMessageTypeRequest || ERROR_SET(&error)) { // Send the response. @@ -391,6 +395,8 @@ static void request_event(void **argv) } else { api_free_object(result); } + +free_ret: api_free_array(e->args); channel_decref(channel); xfree(e); |