diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2018-12-03 13:00:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-03 13:00:41 +0100 |
commit | 231de72539829e6e3b318248c35015aa20c66f31 (patch) | |
tree | 72de67ecda2504f44f5183daaddb60809e855415 /src | |
parent | 07ad5d71ab97a84dc9c59b3507bf7898040d24cf (diff) | |
parent | 8b42249cddf6b257e2eee808a41f3d6dd5af6846 (diff) | |
download | rneovim-231de72539829e6e3b318248c35015aa20c66f31.tar.gz rneovim-231de72539829e6e3b318248c35015aa20c66f31.tar.bz2 rneovim-231de72539829e6e3b318248c35015aa20c66f31.zip |
Merge pull request #9300 from bfredl/asyncerr
rpc: fix invalid responses, turn errors from async calls into notifications
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/msgpack_rpc/channel.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c index 3356cdc61e..46a9e95b91 100644 --- a/src/nvim/msgpack_rpc/channel.c +++ b/src/nvim/msgpack_rpc/channel.c @@ -641,7 +641,16 @@ static WBuffer *serialize_response(uint64_t channel_id, { msgpack_packer pac; msgpack_packer_init(&pac, sbuffer, msgpack_sbuffer_write); - msgpack_rpc_serialize_response(response_id, err, arg, &pac); + if (ERROR_SET(err) && response_id == NO_RESPONSE) { + Array args = ARRAY_DICT_INIT; + ADD(args, INTEGER_OBJ(err->type)); + ADD(args, STRING_OBJ(cstr_to_string(err->msg))); + msgpack_rpc_serialize_request(0, cstr_as_string("nvim_error_event"), + args, &pac); + api_free_array(args); + } else { + msgpack_rpc_serialize_response(response_id, err, arg, &pac); + } log_server_msg(channel_id, sbuffer); WBuffer *rv = wstream_new_buffer(xmemdup(sbuffer->data, sbuffer->size), sbuffer->size, |