diff options
| author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-11-02 20:23:42 -0300 |
|---|---|---|
| committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-11-02 20:23:42 -0300 |
| commit | 5a52bcfa22f83278928d18898cb1df0b3d1a00d9 (patch) | |
| tree | 0d92e2b6dfc6bc721ffbd4afcde29081b3eef156 /src/nvim/msgpack_rpc/channel.c | |
| parent | 48847fbafc41d93bbc42d7bf5711a47c4982e08c (diff) | |
| parent | 75a5674cd2d0921400d2d2c7a9ce9701c58c5b25 (diff) | |
| download | rneovim-5a52bcfa22f83278928d18898cb1df0b3d1a00d9.tar.gz rneovim-5a52bcfa22f83278928d18898cb1df0b3d1a00d9.tar.bz2 rneovim-5a52bcfa22f83278928d18898cb1df0b3d1a00d9.zip | |
Merge PR #1369 'Assert libuv event loop is properly cleaned up'
Diffstat (limited to 'src/nvim/msgpack_rpc/channel.c')
| -rw-r--r-- | src/nvim/msgpack_rpc/channel.c | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c index 58e1f403ec..10d180b3b7 100644 --- a/src/nvim/msgpack_rpc/channel.c +++ b/src/nvim/msgpack_rpc/channel.c @@ -435,13 +435,7 @@ static void handle_request(Channel *channel, msgpack_object *request) Array args = ARRAY_DICT_INIT; msgpack_rpc_to_array(request->via.array.ptr + 3, &args); - - if (kv_size(channel->call_stack) || !handler.defer) { - call_request_handler(channel, handler, args, request_id); - return; - } - - // Defer calling the request handler. + bool defer = (!kv_size(channel->call_stack) && handler.defer); RequestEvent *event_data = kmp_alloc(RequestEventPool, request_event_pool); event_data->channel = channel; event_data->handler = handler; @@ -450,21 +444,16 @@ static void handle_request(Channel *channel, msgpack_object *request) event_push((Event) { .handler = on_request_event, .data = event_data - }); + }, defer); } static void on_request_event(Event event) { RequestEvent *e = event.data; - call_request_handler(e->channel, e->handler, e->args, e->request_id); - kmp_free(RequestEventPool, request_event_pool, e); -} - -static void call_request_handler(Channel *channel, - MsgpackRpcRequestHandler handler, - Array args, - uint64_t request_id) -{ + Channel *channel = e->channel; + MsgpackRpcRequestHandler handler = e->handler; + Array args = e->args; + uint64_t request_id = e->request_id; Error error = ERROR_INIT; Object result = handler.fn(channel->id, request_id, args, &error); // send the response @@ -477,6 +466,7 @@ static void call_request_handler(Channel *channel, &out_buffer)); // All arguments were freed already, but we still need to free the array free(args.items); + kmp_free(RequestEventPool, request_event_pool, e); } static bool channel_write(Channel *channel, WBuffer *buffer) |