Index: Makefile
===================================================================
RCS file: /cvs/ports/editors/neovim/Makefile,v
retrieving revision 1.40
diff -u -p -r1.40 Makefile
--- Makefile 13 Oct 2023 19:30:15 -0000 1.40
+++ Makefile 17 Dec 2023 11:10:04 -0000
@@ -13,6 +13,8 @@ COMMENT = continuation and extension of
DIST_TUPLE = github neovim neovim v0.9.4 .
+REVISION = 0
+
# embedded luajit
USE_NOBTCFI = Yes
Index: patches/patch-src_nvim_event_stream_c
===================================================================
RCS file: patches/patch-src_nvim_event_stream_c
diff -N patches/patch-src_nvim_event_stream_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_nvim_event_stream_c 17 Dec 2023 11:10:04 -0000
@@ -0,0 +1,31 @@
+Fix crash for version 0.9.4 on uv_close
+See https://github.com/neovim/neovim/issues/25086
+
+Index: src/nvim/event/stream.c
+--- src/nvim/event/stream.c.orig
++++ src/nvim/event/stream.c
+@@ -133,15 +133,22 @@ void stream_may_close(Stream *stream)
+ void stream_close_handle(Stream *stream)
+ FUNC_ATTR_NONNULL_ALL
+ {
++ uv_handle_t *handle = NULL;
+ if (stream->uvstream) {
+ if (uv_stream_get_write_queue_size(stream->uvstream) > 0) {
+ WLOG("closed Stream (%p) with %zu unwritten bytes",
+ (void *)stream,
+ uv_stream_get_write_queue_size(stream->uvstream));
+ }
+- uv_close((uv_handle_t *)stream->uvstream, close_cb);
++ handle = (uv_handle_t *)stream->uvstream;
+ } else {
+- uv_close((uv_handle_t *)&stream->uv.idle, close_cb);
++ handle = (uv_handle_t *)&stream->uv.idle;
++ }
++
++ assert(handle != NULL);
++
++ if (!uv_is_closing(handle)) {
++ uv_close(handle, close_cb);
+ }
+ }
+
Hi Edd,
with my configuration and plugins, I have a crash with neovim-0.9.4 on current/amd64 (kernel GENERIC.MP#1523) when I close the editor.
Coredump analysis:
$ gdb /usr/local/bin/nvim /tmp/nvim.core
(...)
(gdb) bt
#0 thrkill () at /tmp/-:2
#1 0x61bb7d265d1d2f53 in ?? ()
#2 0x000000cf81f8c092 in _libc_abort () at /usr/src/lib/libc/stdlib/abort.c:51
#3 0x000000cf81f44e06 in _libc___assert2 (file=Variable "file" is not available.) at /usr/src/lib/libc/gen/assert.c:52
#4 0x000000cfbc8fc7ef in uv_close () from /usr/local/lib/libuv.so.4.1
#5 0x000000ccfd64339a in write_cb.llvm.15707295189128387235 () from /usr/local/bin/nvim
#6 0x000000cfbc908b3e in uv__write_callbacks () from /usr/local/lib/libuv.so.4.1
#7 0x000000cfbc908988 in uv__stream_destroy () from /usr/local/lib/libuv.so.4.1
#8 0x000000cfbc8fcdeb in uv_run () from /usr/local/lib/libuv.so.4.1
#9 0x000000ccfd63e087 in loop_close () from /usr/local/bin/nvim
#10 0x000000ccfd5181b5 in os_exit () from /usr/local/bin/nvim
#11 0x000000ccfd518151 in getout () from /usr/local/bin/nvim
#12 0x000000ccfd663180 in ex_quit.llvm.18128057263189303951 () from /usr/local/bin/nvim
#13 0x000000ccfd659fd0 in execute_cmd0 () from /usr/local/bin/nvim
#14 0x000000ccfd654fe1 in do_cmdline () from /usr/local/bin/nvim
#15 0x000000ccfd74332e in nv_colon.llvm.1549626131334729254 () from /usr/local/bin/nvim
#16 0x000000ccfd73efbc in normal_execute.llvm.1549626131334729254 () from /usr/local/bin/nvim
#17 0x000000ccfd836f01 in state_enter () from /usr/local/bin/nvim
#18 0x000000ccfd5173e5 in main () from /usr/local/bin/nvim
This backtrace looks like this one described in issue#25086 https://github.com/neovim/neovim/issues/25086
=> crash using 'uv_close'.
I added the fix included in this issue, rebuild => no more crash with Neovim :)
Please, could you test and commit my patch if OK for you ?
Laurent
No comments:
Post a Comment