diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2015-09-16 02:48:10 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2015-09-16 02:52:55 -0300 |
commit | 22ea2900d0eeca0f3cdc4ee5dbfce66966d1a661 (patch) | |
tree | 8cb320d319884621dce679b3ec8087f2d00db9db | |
parent | 5613b62224e4cf8a0088537c7f4ea883530e3cf8 (diff) | |
download | rneovim-22ea2900d0eeca0f3cdc4ee5dbfce66966d1a661.tar.gz rneovim-22ea2900d0eeca0f3cdc4ee5dbfce66966d1a661.tar.bz2 rneovim-22ea2900d0eeca0f3cdc4ee5dbfce66966d1a661.zip |
loop: Free the parent queue last when destroying the loop
This avoids a heap-use-after-free ASAN error. Close #3334
-rw-r--r-- | src/nvim/event/loop.c | 2 | ||||
-rw-r--r-- | test/functional/ex_cmds/quit_spec.lua | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/nvim/event/loop.c b/src/nvim/event/loop.c index 088e059d19..6f3e6b9253 100644 --- a/src/nvim/event/loop.c +++ b/src/nvim/event/loop.c @@ -86,9 +86,9 @@ void loop_close(Loop *loop) do { uv_run(&loop->uv, UV_RUN_DEFAULT); } while (uv_loop_close(&loop->uv)); - queue_free(loop->events); queue_free(loop->fast_events); queue_free(loop->thread_events); + queue_free(loop->events); kl_destroy(WatcherPtr, loop->children); } diff --git a/test/functional/ex_cmds/quit_spec.lua b/test/functional/ex_cmds/quit_spec.lua new file mode 100644 index 0000000000..3cd8e19617 --- /dev/null +++ b/test/functional/ex_cmds/quit_spec.lua @@ -0,0 +1,14 @@ +local helpers = require('test.functional.helpers') +local execute, eq, clear = helpers.execute, helpers.eq, helpers.clear + +describe(':qa', function() + before_each(function() + clear('qa') + end) + + it('verify #3334', function() + -- just testing if 'qa' passed as a program argument wont result in memory + -- errors + end) +end) + |