Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segfault (msgpack) #27859

Closed
qRoC opened this issue Mar 14, 2024 · 37 comments · Fixed by #28355
Closed

Segfault (msgpack) #27859

qRoC opened this issue Mar 14, 2024 · 37 comments · Fixed by #28355
Labels
bug-crash issue reporting a crash or segfault has:backtrace issue contains a stacktrace/ASAN log has:bisected issue has been tracked to a specific commit needs:repro We need minimal steps to reproduce the issue rpc tui
Milestone

Comments

@qRoC
Copy link

qRoC commented Mar 14, 2024

Problems

  1. exit with status 1 (logs: chan_close_with_error:560: RPC: (null))
  2. Crash with status 130:
Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x00000003209cd220
Exception Codes:       0x0000000000000001, 0x00000003209cd220

Termination Reason:    Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process:   exc handler [11660]

VM Region Info: 0x3209cd220 is not in any region.  Bytes after previous region: 2385498657  Bytes before following region: 54213684704
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      unused __TEXT               2926cc000-2926d0000    [   16K] r--/r-- SM=COW  unused  unknown system shared lib __TEXT
--->  GAP OF 0xd2d930000 BYTES
      commpage (reserved)         fc0000000-1000000000   [  1.0G] ---/--- SM=NUL  reserved VM address space (unallocated)

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   nvim                          	       0x100d60ab4 tui_raw_line + 80
1   nvim                          	       0x100bf62a8 parse_msgpack + 348
2   nvim                          	       0x100bf3ff0 receive_msgpack + 304
3   nvim                          	       0x100af0dc8 read_cb + 404
4   libuv.1.dylib                 	       0x1014e35b4 uv__stream_io + 1004
5   libuv.1.dylib                 	       0x1014ea164 uv__io_poll + 1408
6   libuv.1.dylib                 	       0x1014da93c uv_run + 272
7   nvim                          	       0x100d689bc ui_client_run + 172
8   nvim                          	       0x100b963cc main + 17512
9   dyld                          	       0x198bc60e0 start + 2360

Steps to reproduce

Scroll any file

Expected behavior

No crash/errors

Neovim version (nvim -v)

NVIM v0.10.0-dev-2582+g2a8cef6bd-Homebrew
NVIM v0.10.0-dev-2593+ga6b6d036b-Homebrew
NVIM v0.10.0-dev-2536+g55c9e2c96 <-- broken commit

Vim (not Nvim) behaves the same?

no

Operating system/version

macOS 14

Terminal name/version

Alacritty

$TERM environment variable

xterm-256color

Installation

brew

@qRoC qRoC added the bug issues reporting wrong behavior label Mar 14, 2024
@qRoC
Copy link
Author

qRoC commented Mar 14, 2024

Broken commit #55c9e2c

@bfredl

@seandewar seandewar added has:backtrace issue contains a stacktrace/ASAN log bug-crash issue reporting a crash or segfault has:bisected issue has been tracked to a specific commit ui tui and removed bug issues reporting wrong behavior ui labels Mar 14, 2024
@nyngwang
Copy link

nyngwang commented Mar 14, 2024

Can confirm, I just encountered this at the current HEAD a6b6d03.

@zeertzjq zeertzjq added this to the 0.10 milestone Mar 14, 2024
@zeertzjq zeertzjq added the rpc label Mar 15, 2024
@zeertzjq
Copy link
Member

Can you build Nvim with ASAN and get an ASAN log?

@qRoC
Copy link
Author

qRoC commented Mar 15, 2024

Commit: a6b6d036b19a548e3f2a199c6927ac7495c02ea1
Build type: Debug
LuaJIT 2.1.1703358377
Compilation: /usr/bin/clang -g -fno-sanitize-recover=all -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=undefined -fsanitize=address -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wvla -Wdouble-promotion -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -fsigned-char -fstack-protector-strong -Wimplicit-fallthrough -fdiagnostics-color=auto -Wl,-export_dynamic -DENABLE_ASAN_UBSAN -DNVIM_LOG_DEBUG -DUNIT_TESTING -DHAVE_UNIBILIUM -D_GNU_SOURCE -DINCLUDE_GENERATED_DECLARATIONS -DEXITFREE -I/opt/homebrew/include/luajit-2.1 -I/opt/homebrew/include -I/Users/qroc/Downloads/neovim/build/src/nvim/auto -I/Users/qroc/Downloads/neovim/build/include -I/Users/qroc/Downloads/neovim/build/cmake.config -I/Users/qroc/Downloads/neovim/src -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.4.sdk/usr/include -I/Library/Frameworks/Mono.framework/Headers


When crash (interesting fact - sometimes the tmux session with Alacritty dies)

==94808==ERROR: AddressSanitizer: SEGV on unknown address 0x0002edfca120 (pc 0x0001048e23f0 bp 0x00016d0475e0 sp 0x00016d046e30 T0)
==94808==The signal is caused by a READ memory access.
    #0 0x1048e23f0 in tui_raw_line tui.c:1582
    #1 0x1049361a0 in ui_client_event_raw_line ui_client.c:230
    #2 0x103f27a1c in parse_msgpack channel.c:293
    #3 0x103f18aa0 in receive_msgpack channel.c:263
    #4 0x103759adc in read_event rstream.c:191
    #5 0x103759214 in invoke_read_cb rstream.c:204
    #6 0x103757a28 in read_cb rstream.c:133
    #7 0x10610b5b0 in uv__stream_io+0x3e8 (libuv.1.dylib:arm64+0x135b0)
    #8 0x106112160 in uv__io_poll+0x57c (libuv.1.dylib:arm64+0x1a160)
    #9 0x106102938 in uv_run+0x10c (libuv.1.dylib:arm64+0xa938)
    #10 0x10373ddd8 in loop_uv_run loop.c:61
    #11 0x10373d8a8 in loop_poll_events loop.c:82
    #12 0x1049339cc in ui_client_run ui_client.c:131
    #13 0x103be5a34 in main main.c:400
    #14 0x198bc60dc  (<unknown module>)

==94808==Register values:
 x[0] = 0x000000010aa14800   x[1] = 0x0000000075706e69   x[2] = 0x000000003ca59174   x[3] = 0x000000003e642d43
 x[4] = 0x000000003e642e31   x[5] = 0x000000003e642e31   x[6] = 0x0000000000000000   x[7] = 0x0000000000000000
 x[8] = 0x00000002edfca120   x[9] = 0x00000002edfca120  x[10] = 0x0000000000000000  x[11] = 0x0000000000000001
x[12] = 0x0000000108d01580  x[13] = 0x000000016d045c88  x[14] = 0x000000016d045c80  x[15] = 0x0000000000000000
x[16] = 0x0000000198f7f1a0  x[17] = 0x000000010666c5d8  x[18] = 0x0000000000000000  x[19] = 0x000000016d047ae0
x[20] = 0x0000000105d02130  x[21] = 0x0000000000000000  x[22] = 0x0000000000000001  x[23] = 0x0000000000001894
x[24] = 0x0000000000000001  x[25] = 0x000000000000001f  x[26] = 0x0000000105d0219c  x[27] = 0x0000000000000001
x[28] = 0x000000016d049160     fp = 0x000000016d0475e0     lr = 0x00000001049361a4     sp = 0x000000016d046e30
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV tui.c:1582 in tui_raw_line
==94808==ABORTING
==29858==ERROR: AddressSanitizer: ABRT on unknown address 0x000198f16a60 (pc 0x000198f16a60 bp 0x00016fd01d70 sp 0x00016fd01d50 T0)
    #0 0x198f16a60 in __pthread_kill+0x8 (libsystem_kernel.dylib:arm64e+0x9a60)
    #1 0x198e5ba1c in abort+0xb0 (libsystem_c.dylib:arm64e+0x76a1c)
    #2 0x198e5ad0c in __assert_rtn+0x118 (libsystem_c.dylib:arm64e+0x75d0c)
    #3 0x10128d0a4 in unpacker_parse_redraw unpacker.c:462
    #4 0x1012884d8 in unpacker_advance unpacker.c:320
    #5 0x10126b6a8 in parse_msgpack channel.c:288
    #6 0x10125caa0 in receive_msgpack channel.c:263
    #7 0x100a9dadc in read_event rstream.c:191
    #8 0x100a9d214 in invoke_read_cb rstream.c:204
    #9 0x100a9ba28 in read_cb rstream.c:133
    #10 0x10344f5b0 in uv__stream_io+0x3e8 (libuv.1.dylib:arm64+0x135b0)
    #11 0x103456160 in uv__io_poll+0x57c (libuv.1.dylib:arm64+0x1a160)
    #12 0x103446938 in uv_run+0x10c (libuv.1.dylib:arm64+0xa938)
    #13 0x100a81dd8 in loop_uv_run loop.c:61
    #14 0x100a818a8 in loop_poll_events loop.c:82
    #15 0x101c779cc in ui_client_run ui_client.c:131
    #16 0x100f29a34 in main main.c:400
    #17 0x198bc60dc  (<unknown module>)

==29858==Register values:
 x[0] = 0x0000000000000000   x[1] = 0x0000000000000000   x[2] = 0x0000000000000000   x[3] = 0x0000000000000000
 x[4] = 0x0000000000000000   x[5] = 0x000000000000002e   x[6] = 0x000000016f514000   x[7] = 0x00000000000008a0
 x[8] = 0x5d6deffd101239b9   x[9] = 0x5d6defff10d78379  x[10] = 0x000000702dfc03b3  x[11] = 0x000000002dfa03b3
x[12] = 0x000000002dfa03b3  x[13] = 0x0000000000000000  x[14] = 0x0000000000000000  x[15] = 0x0000000000000000
x[16] = 0x0000000000000148  x[17] = 0x000000020afc6c30  x[18] = 0x0000000000000000  x[19] = 0x0000000000000006
x[20] = 0x0000000200c5bac0  x[21] = 0x0000000000000103  x[22] = 0x0000000200c5bba0  x[23] = 0x000000010218b1a0
x[24] = 0x00000001ff95a000  x[25] = 0x000000000000001f  x[26] = 0x000000010300219c  x[27] = 0x0000000000000001
x[28] = 0x000000016fd051a0     fp = 0x000000016fd01d70     lr = 0x0000000198f4ec20     sp = 0x000000016fd01d50
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: ABRT (libsystem_kernel.dylib:arm64e+0x9a60) in __pthread_kill+0x8
==29858==ABORTING

Last logs:

DBG 2024-03-15T09:50:05.659 nvim.29932.0 ui_comp_raw_line:522: compositor: invalid row 80 on grid 3
DBG 2024-03-15T09:50:05.659 nvim.29932.0 inbuf_poll:466: blocking... events_enabled=0 events_pending=0
DBG 2024-03-15T09:50:05.659 nvim.29932.0 UI: raw_line (+1 times...)
DBG 2024-03-15T09:50:05.659 nvim.29932.0 UI: win_viewport
DBG 2024-03-15T09:50:05.659 nvim.29932.0 UI: flush
DBG 2024-03-15T09:50:05.659 nvim.29932.0 inbuf_poll:466: blocking... events_enabled=1 events_pending=0
DBG 2024-03-15T09:50:05.795 nvim.29932.0 read_cb:118: closing Stream (0x107301ea0): EOF (end of file)
DBG 2024-03-15T09:50:05.795 nvim.29932.0 stream_close:106: closing Stream: 0x107301ea0
DBG 2024-03-15T09:50:05.795 nvim.29932.0 stream_close:106: closing Stream: 0x107302050
INF 2024-03-15T09:50:05.795 nvim.29932.0 chan_close_with_error:560: RPC: ch 1 was closed by the client

Sometimes nvim exit with 141 error (so asan not created), when i build in Debug mode, I See logs:

DBG 2024-03-15T09:37:24.960 nvim.80182.0 state_enter:98: input: K_EVENT
DBG 2024-03-15T09:37:24.960 nvim.80182.0 state_no_longer_safe:315: SafeState reset: ins_typebuf()
DBG 2024-03-15T09:37:24.960 nvim.80182.0 may_trigger_safestate:301: SafeState: Start triggering
DBG 2024-03-15T09:37:24.961 nvim.80182.0 UI: raw_line
DBG 2024-03-15T09:37:24.963 nvim.80182.0 inbuf_poll:466: blocking... events_enabled=0 events_pending=0
DBG 2024-03-15T09:37:24.963 nvim.80182.0 UI: raw_line (+152 times...)
DBG 2024-03-15T09:37:24.963 nvim.80182.0 UI: win_viewport
DBG 2024-03-15T09:37:24.963 nvim.80182.0 UI: flush
DBG 2024-03-15T09:37:24.963 nvim.80182.0 state_enter:98: input: K_EVENT
DBG 2024-03-15T09:37:24.963 nvim.80182.0 state_no_longer_safe:315: SafeState reset: ins_typebuf()
DBG 2024-03-15T09:37:24.963 nvim.80182.0 may_trigger_safestate:301: SafeState: Start triggering
DBG 2024-03-15T09:37:24.964 nvim.80182.0 UI: raw_line
DBG 2024-03-15T09:37:24.966 nvim.80182.0 inbuf_poll:466: blocking... events_enabled=0 events_pending=0
DBG 2024-03-15T09:37:24.966 nvim.80182.0 UI: raw_line (+152 times...)
DBG 2024-03-15T09:37:24.966 nvim.80182.0 UI: win_viewport
DBG 2024-03-15T09:37:24.966 nvim.80182.0 UI: flush
DBG 2024-03-15T09:37:24.966 nvim.80182.0 state_enter:98: input: K_EVENT
DBG 2024-03-15T09:37:24.966 nvim.80182.0 state_no_longer_safe:315: SafeState reset: ins_typebuf()
DBG 2024-03-15T09:37:24.966 nvim.80182.0 may_trigger_safestate:301: SafeState: Start triggering
DBG 2024-03-15T09:37:24.966 ?.80181    log_notify:61: RPC -> 3: [notify]    nvim_input
DBG 2024-03-15T09:37:24.967 ?.80181    receive_msgpack:257: ch 3: parsing 6682 bytes from msgpack Stream: 0x1031020a0
ERR 2024-03-15T09:37:24.967 ?.80181    chan_close_with_error:560: RPC: (null)
DBG 2024-03-15T09:37:24.967 ?.80181    stream_close:106: closing Stream: 0x103101ef0
DBG 2024-03-15T09:37:24.967 ?.80181    stream_close:106: closing Stream: 0x1031020a0
DBG 2024-03-15T09:37:24.967 nvim.80182.0 UI: raw_line
DBG 2024-03-15T09:37:24.969 nvim.80182.0 receive_msgpack:257: ch 1: parsing 36 bytes from msgpack Stream: 0x107c01ea0
DBG 2024-03-15T09:37:24.969 nvim.80182.0 log_notify:61: RPC <- 1: [notify]    nvim_input
DBG 2024-03-15T09:37:24.969 nvim.80182.0 handle_nvim_input:6803: RPC: ch 1: invoke nvim_input
DBG 2024-03-15T09:37:24.969 nvim.80182.0 read_cb:118: closing Stream (0x107c01ea0): EOF (end of file)
DBG 2024-03-15T09:37:24.969 nvim.80182.0 stream_close:106: closing Stream: 0x107c01ea0
DBG 2024-03-15T09:37:24.969 nvim.80182.0 stream_close:106: closing Stream: 0x107c02050
INF 2024-03-15T09:37:24.969 nvim.80182.0 chan_close_with_error:560: RPC: ch 1 was closed by the client
DBG 2024-03-15T09:37:25.079 nvim.80182.0 state_no_longer_safe:315: SafeState reset: ins_typebuf()
INF 2024-03-15T09:37:25.118 ?.80181    on_process_exit:432: exited: pid=80182 status=141 stoptime=0
DBG 2024-03-15T09:37:25.120 ?.80181    stream_close:106: closing Stream: 0x107f24968
INF 2024-03-15T09:37:25.120 ?.80181    os_exit:692: Nvim exit: 141
DBG 2024-03-15T09:45:03.072 nvim.10743.0 UI: raw_line (+170 times...)
DBG 2024-03-15T09:45:03.072 nvim.10743.0 UI: win_viewport
DBG 2024-03-15T09:45:03.072 nvim.10743.0 UI: flush
DBG 2024-03-15T09:45:03.072 nvim.10743.0 state_enter:98: input: K_EVENT
DBG 2024-03-15T09:45:03.072 nvim.10743.0 state_no_longer_safe:315: SafeState reset: ins_typebuf()
DBG 2024-03-15T09:45:03.077 ?.10719    receive_msgpack:257: ch 3: parsing 8192 bytes from msgpack Stream: 0x1078020a0
DBG 2024-03-15T09:45:03.082 ?.10719    log_notify:61: RPC -> 3: [notify]    nvim_input
DBG 2024-03-15T09:45:03.082 ?.10719    receive_msgpack:257: ch 3: parsing 8050 bytes from msgpack Stream: 0x1078020a0
ERR 2024-03-15T09:45:03.082 ?.10719    chan_close_with_error:560: RPC: (null)
DBG 2024-03-15T09:45:03.082 ?.10719    stream_close:106: closing Stream: 0x107801ef0
DBG 2024-03-15T09:45:03.082 ?.10719    stream_close:106: closing Stream: 0x1078020a0
DBG 2024-03-15T09:45:03.082 nvim.10743.0 receive_msgpack:257: ch 1: parsing 36 bytes from msgpack Stream: 0x103401ea0
DBG 2024-03-15T09:45:03.083 nvim.10743.0 log_notify:61: RPC <- 1: [notify]    nvim_input
DBG 2024-03-15T09:45:03.083 nvim.10743.0 handle_nvim_input:6803: RPC: ch 1: invoke nvim_input
DBG 2024-03-15T09:45:03.083 nvim.10743.0 read_cb:118: closing Stream (0x103401ea0): EOF (end of file)
DBG 2024-03-15T09:45:03.083 nvim.10743.0 stream_close:106: closing Stream: 0x103401ea0
DBG 2024-03-15T09:45:03.083 nvim.10743.0 stream_close:106: closing Stream: 0x103402050
INF 2024-03-15T09:45:03.083 nvim.10743.0 chan_close_with_error:560: RPC: ch 1 was closed by the client
INF 2024-03-15T09:45:03.191 nvim.10743.0 emsg_multiline:718: Error executing vim.schedule lua callback: ...vim-treesitter-context/lua/treesitter-context/render.lua:51: 'height' key must be a positive Integer
stack traceback:
        [C]: in function 'nvim_open_win'
        ...vim-treesitter-context/lua/treesitter-context/render.lua:51: in function 'display_window'
        ...vim-treesitter-context/lua/treesitter-context/render.lua:340: in function 'open'
        .../lazy/nvim-treesitter-context/lua/treesitter-context.lua:50: in function 'open'
        .../lazy/nvim-treesitter-context/lua/treesitter-context.lua:111: in function <.../lazy/nvim-treesitter-context/lua/treesitter-context.lua:92>
INF 2024-03-15T09:45:03.212 ?.10719    on_process_exit:432: exited: pid=10743 status=141 stoptime=0
DBG 2024-03-15T09:45:03.215 ?.10719    stream_close:106: closing Stream: 0x10c524968
INF 2024-03-15T09:45:03.215 ?.10719    os_exit:692: Nvim exit: 141

@bfredl
Copy link
Member

bfredl commented Mar 21, 2024

before investigating this more, can someone confirm they still see this after #27871 ?

@qRoC
Copy link
Author

qRoC commented Mar 21, 2024

@bfredl everything seems ok. I will reopen the issue if the crashes happen again

@qRoC qRoC closed this as completed Mar 21, 2024
@qRoC qRoC reopened this Mar 22, 2024
@qRoC
Copy link
Author

qRoC commented Mar 22, 2024

@bfredl I'm reopening this issue because some crashes occurred.

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x000000032924cc20
Exception Codes:       0x0000000000000001, 0x000000032924cc20

Termination Reason:    Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process:   exc handler [49418]

VM Region Info: 0x31594d6e0 is not in any region.  Bytes after previous region: 2200426209  Bytes before following region: 54398757152
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      unused __TEXT               2926cc000-2926d0000    [   16K] r--/r-- SM=COW  unused  unknown system shared lib __TEXT
--->  GAP OF 0xd2d930000 BYTES
      commpage (reserved)         fc0000000-1000000000   [  1.0G] ---/--- SM=NUL  reserved VM address space (unallocated)

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   nvim                          	       0x102e7c8a4 tui_raw_line + 80
1   nvim                          	       0x102d1193c parse_msgpack + 348
2   nvim                          	       0x102d0f684 receive_msgpack + 304
3   nvim                          	       0x102c0c28c read_cb + 404
4   libuv.1.dylib                 	       0x1035ff5b4 uv__stream_io + 1004
5   libuv.1.dylib                 	       0x103606164 uv__io_poll + 1408
6   libuv.1.dylib                 	       0x1035f693c uv_run + 272
7   nvim                          	       0x102e84894 ui_client_run + 172
8   nvim                          	       0x102cb1a3c main + 17512
9   dyld                          	       0x198bc60e0 start + 2360

@fredizzimo
Copy link
Contributor

We just got this bug report in Neovide, that might be related, but it's too early to tell for sure

Based on the logs, it looks like some rpc data is lost, and therefore we get the parameters of hl_attr_define as a response to nvim_input

@fredizzimo
Copy link
Contributor

@bfredl, reverting to 6525832, fixes the issue in Neovide, so I'm fairly sure that neovide/neovide#2452 is the same bug, we just detect the error and report it earlier than the terminal version.

We have the following log:

TRACE [neovide::window::keyboard_manager] Key pressed l ModifiersState(0x0)
TRACE [neovide::channel_utils] UICommand Serial(Keyboard("l"))
TRACE [neovide::bridge::ui_commands] In Serial Command
TRACE [neovide::bridge::ui_commands] Keyboard Input Sent: l
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
TRACE [neovide::channel_utils] neovim_handler WindowFloatPosition { grid: 146, anchor: NorthEast, anchor_grid: 1, anchor_row: 34.0, anchor_column: 132.0, focusable: true, sort_order: Some(50) }
TRACE [neovide::channel_utils] neovim_handler WindowFloatPosition { grid: 145, anchor: NorthWest, anchor_grid: 2, anchor_row: 0.0, anchor_column: 9.0, focusable: false, sort_order: Some(20) }
TRACE [neovide::channel_utils] neovim_handler WindowFloatPosition { grid: 144, anchor: NorthWest, anchor_grid: 2, anchor_row: 0.0, anchor_column: 0.0, focusable: false, sort_order: Some(20) }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3979, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.27058825, g: 0.2784314, b: 0.35686275, a: 1.0 }), background: None, special: None }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: None, infos: [HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }] } }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3980, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.27058825, g: 0.2784314, b: 0.35686275, a: 1.0 }), background: Some(Color4f { r: 0.09411765, g: 0.09411765, b: 0.14901961, a: 1.0 }), special: None }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: None, infos: [HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }] } }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3981, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.42352942, g: 0.4392157, b: 0.5294118, a: 1.0 }), background: None, special: None }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: None, infos: [HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }] } }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3982, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.27058825, g: 0.2784314, b: 0.35686275, a: 1.0 }), background: Some(Color4f { r: 0.09411765, g: 0.09411765, b: 0.14901961, a: 1.0 }), special: None }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: None, infos: [HighlightInfo { kind: Ui, ui_name: "NormalNC", hi_name: "NormalNC", id: 945 }, HighlightInfo { kind: Ui, ui_name: "NormalFloat", hi_name: "NormalFloat", id: 1559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }] } }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3983, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.27058825, g: 0.2784314, b: 0.35686275, a: 1.0 }), background: Some(Color4f { r: 0.09411765, g: 0.09411765, b: 0.14901961, a: 1.0 }), special: None }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: None, infos: [HighlightInfo { kind: Ui, ui_name: "NormalNC", hi_name: "NormalNC", id: 945 }, HighlightInfo { kind: Ui, ui_name: "NormalFloat", hi_name: "NormalFloat", id: 1559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }] } }
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3984, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.42352942, g: 0.4392157, b: 0.5294118, a: 1.0 }), background: Some(Color4f { r: 0.09411765, g: 0.09411765, b: 0.14901961, a: 1.0 }), special: None }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: None, infos: [HighlightInfo { kind: Ui, ui_name: "NormalNC", hi_name: "NormalNC", id: 945 }, HighlightInfo { kind: Ui, ui_name: "NormalFloat", hi_name: "NormalFloat", id: 1559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "FoldColumn", id: 447 }] } }
TRACE [neovide::channel_utils] neovim_handler GridLine { grid: 144, row: 0, column_start: 0, cells: [GridLineCell { text: " ", highlight_id: Some(3982), repeat: Some(4) }, GridLineCell { text: " ", highlight_id: Some(3983), repeat: None }, GridLineCell { text: "6", highlight_id: None, repeat: None }, GridLineCell { text: "5", highlight_id: None, repeat: None }, GridLineCell { text: "\u{f47c}", highlight_id: Some(3984), repeat: None }, GridLineCell { text: " ", highlight_id: Some(3982), repeat: None }, GridLineCell { text: " ", highlight_id: Some(1560), repeat: Some(0) }] }
TRACE [neovide::channel_utils] neovim_handler GridLine { grid: 144, row: 1, column_start: 0, cells: [GridLineCell { text: " ", highlight_id: Some(3982), repeat: Some(4) }, GridLineCell { text: " ", highlight_id: Some(3983), repeat: None }, GridLineCell { text: "5", highlight_id: None, repeat: None }, GridLineCell { text: "8", highlight_id: None, repeat: None }, GridLineCell { text: "\u{f47c}", highlight_id: Some(3984), repeat: None }, GridLineCell { text: " ", highlight_id: Some(3982), repeat: None }, GridLineCell { text: " ", highlight_id: Some(1560), repeat: Some(0) }] }
TRACE [neovide::channel_utils] neovim_handler GridLine { grid: 144, row: 2, column_start: 0, cells: [GridLineCell { text: " ", highlight_id: Some(3982), repeat: Some(4) }, GridLineCell { text: " ", highlight_id: Some(3983), repeat: None }, GridLineCell { text: "4", highlight_id: None, repeat: None }, GridLineCell { text: "7", highlight_id: None, repeat: None }, GridLineCell { text: "\u{f47c}", highlight_id: Some(3984), repeat: None }, GridLineCell { text: " ", highlight_id: Some(3982), repeat: None }, GridLineCell { text: " ", highlight_id: Some(1560), repeat: Some(0) }] }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3985, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.27058825, g: 0.2784314, b: 0.35686275, a: 1.0 }), background: None, special: Some(Color4f { r: 0.19215687, g: 0.19607843, b: 0.27058825, a: 1.0 }) }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: Some(Underline), infos: [HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }] } }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3986, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.27058825, g: 0.2784314, b: 0.35686275, a: 1.0 }), background: None, special: Some(Color4f { r: 0.19215687, g: 0.19607843, b: 0.27058825, a: 1.0 }) }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: Some(Underline), infos: [HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "SignColumn", id: 449 }] } }
TRACE [neovide::bridge::handler] Neovim notification: "redraw"
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3987, style: Style { colors: Colors { foreground: None, background: None, special: Some(Color4f { r: 0.19215687, g: 0.19607843, b: 0.27058825, a: 1.0 }) }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: Some(Underline), infos: [HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }] } }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3988, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.27058825, g: 0.2784314, b: 0.35686275, a: 1.0 }), background: Some(Color4f { r: 0.09411765, g: 0.09411765, b: 0.14901961, a: 1.0 }), special: Some(Color4f { r: 0.19215687, g: 0.19607843, b: 0.27058825, a: 1.0 }) }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: Some(Underline), infos: [HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }] } }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3989, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.27058825, g: 0.2784314, b: 0.35686275, a: 1.0 }), background: Some(Color4f { r: 0.09411765, g: 0.09411765, b: 0.14901961, a: 1.0 }), special: Some(Color4f { r: 0.19215687, g: 0.19607843, b: 0.27058825, a: 1.0 }) }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: Some(Underline), infos: [HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }] } }
TRACE [neovide::channel_utils] neovim_handler HighlightAttributesDefine { id: 3990, style: Style { colors: Colors { foreground: Some(Color4f { r: 0.27058825, g: 0.2784314, b: 0.35686275, a: 1.0 }), background: Some(Color4f { r: 0.09411765, g: 0.09411765, b: 0.14901961, a: 1.0 }), special: Some(Color4f { r: 0.19215687, g: 0.19607843, b: 0.27058825, a: 1.0 }) }, reverse: false, italic: false, bold: false, strikethrough: false, blend: 0, underline: Some(Underline), infos: [HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextBottom", id: 559 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }, HighlightInfo { kind: Syntax, ui_name: "", hi_name: "TreesitterContextLineNumber", id: 558 }] } }
ERROR [neovide::bridge] Error: 'Error reading message'
INFO [neovide::running_tracker] Quit neovim processed failed
ERROR [neovide::bridge::ui_commands] Input failed

Caused by:
    0: Error decoding response to request 'nvim_input'
    1: Error while decoding
    2: Value not an Array: '{"kind": "syntax", "hi_name": "SignColumn", "id": 449}'

So, no flush is revived before the response to nvim_input, which now contains data from the redraw notification instead of the expected response.

@theofabilous
Copy link
Contributor

I'm also encountering a similar issue, bisected to conclude that #55c9e2c introduced this. I can only reproduce the crash under tmux (3.3a, 3.4), in both Alacritty and Kitty.

When running a debug build, instead of abort()ing or crashing with a segfault, the following assertion fails:

case 15:
for (; g->icell != g->ncells; g->icell++) {
assert(g->icell < g->ncells);

which I suppose is indicative of garbage data (the values of both g->icell and g->ncells are impossibly huge, and the other fields of the GridLineEvent are non-sensical).

It seems like most such crashes occur more or less as follows (all in the TUI process):

  • an incomplete read from the channel's rstream (8192 bytes exactly)
  • EOF token encountered in state 15 in the redraw decoder (due to incomplete read), returning from the function but still in state 15
  • send nvim_input event (I think I've also seen this be a set_focus event, not sure)
  • next call to advance unpacker resumes at state 15, using the previous line grid event data p->grid_line_event which now contains garbage

The "garbage" state of the grid_line_event seems to be somewhat consistent. Just before the crash, if I inspect grid_line_event->args[0], I get 1970302569:

(1970302569).to_bytes(4, 'little')
# >> b'inpu'
# i.e. inpu(t) ?

which could be some memory corruption due to the nvim_input event?

@theofabilous
Copy link
Contributor

theofabilous commented Apr 15, 2024

Setting up a memory watch point at p->grid_line_event's address while debugging shows that the memory location is overwritten between the incomplete decoding of the redraw event and the next read. This happens somewhere in serialize_request(). In this specific instance I can see that joining the bytes in p->grid_line_event->args yield 'ui_set_focus', and p->grid_line_event->icell is also overwritten (all of this happens while p->state is still 15).

@bfredl I think I've figured out what's causing this. Here is the specific sequence of events that I think causes this bug:


After a successful and complete redraw (state 16 reached), unpacker_parse_redraw() returns true. At this point p->grid_line_event is allocated in the arena p->arena. If --p->ncalls > 0, we switch back to state 14 before returning:

case 16:
p->ncalls--;
if (p->ncalls > 0) {
p->state = (p->state == 16) ? 14 : 12;
} else if (p->nevents > 0) {
p->state = 11;
} else {
p->state = 0;
}
return true;

Then in parse_msgpack() inside the while (unpacker_advance(p)) loop, we free the arena memory (line 298):

while (unpacker_advance(p)) {
if (p->type == kMessageTypeRedrawEvent) {
// When exiting, ui_client_stop() has already been called, so don't handle UI events.
if (ui_client_channel_id && !exiting) {
if (p->grid_line_event) {
ui_client_event_raw_line(p->grid_line_event);
} else if (p->ui_handler.fn != NULL && p->result.type == kObjectTypeArray) {
p->ui_handler.fn(p->result.data.array);
}
}
arena_mem_free(arena_finish(&p->arena));

But now p->state == 14 which means the next call to the redraw decoder will skip the arena allocation of p->grid_line_event (this happens in state 11) but still write to it. I think ASAN sometimes misses this because it's using the arena_reuse_blks which aren't really ever freed (i.e. the memory is "valid"). I suspect this is also why nothing fails if the entire redraw cycle is finished in one "go", since there aren't any intermediate allocations that overwrite the data. Not sure though.

However, if the read is incomplete (see my previous comment, seems to occur when size > 8192) and we bail out at p->state == 15 where p->grid_line_event's data has already been filled, we might process another event before finishing the redraw state machine cycle.

For example the TUI could send some input (in the case of the debugging session I mentioned above, the TUI sends a focus event) which uses data allocated with alloc_block() (which likely uses the arena_reuse_blk), overwriting the memory of p->grid_line_event. Then, on the next read, we return to state 15 and use p->grid_line_event which now contains garbage.

Making the grid_line_event field in Unpacker a value instead of a pointer (thus never allocating/freeing it, and never needing to do so) seems to fix the bug, further confirming this idea.


NOTE: The bug is pretty hard to reproduce consistently. I usually need to have nvim open in a tmux split pane and go absolutely nuts scrolling with the mouse wheel while spamming the middle mouse or keyboard keys to try to sneak in an input event midway through a really long redraw event. However I do naturally encounter this crash about a couple of times a week.

@qRoC
Copy link
Author

qRoC commented Apr 18, 2024

@bfredl hello, I build from master and this error is not fixed

@justinmk
Copy link
Member

@qRoC as always, need more details than that. exact commit? stacktrace? steps to reproduce?

@qRoC
Copy link
Author

qRoC commented Apr 19, 2024

@justinmk As I said in the first message, sigfault does not always occur (often 130, 139, 141).

At the moment, the case that consistently caused the problem (scrolling the main buffer) has been fixed.

But I caught 139 while scrolling the float window and at the moment I can't reproduce it, but I'll keep you posted.

@fredizzimo
Copy link
Contributor

In Neovide we also still have some reports of crashes. Here's one including a log file from the Neovim side

Based on a very surface level analysis it looks like there's a race condition between processing RPC messages from Neovide, sending of the UI flush messages, so the responses get intermixed.

It was also confirmed again that #55c9e2c commit that breaks it. My humble opinion is that it should be reverted for the 0.10 release at least, since it's just an optimization without any profiling data to back up the need for it.

@fredizzimo
Copy link
Contributor

I also believe that the fix by @theofabilous, was just a band-aid fix on the receiving side, while the actual problem occurs on the sending side.

@bfredl
Copy link
Member

bfredl commented May 11, 2024

since it's just an optimization without any profiling data to back up the need for it.

No, it is not.

Logs were just published 15 minutes ago. We do not revert stuff in a panic immediately a few minutes after there is any data indicating there is an issue in the first place.

was just a band-aid fix on the receiving side, while the actual problem occurs on the sending side.

Things can be actual problems even if they don't affect you personally. This was a bug in the TUI client.

@bfredl
Copy link
Member

bfredl commented May 11, 2024

A hypothesis is that we lack enough synchronization between UI packing and non-UI packing (might need to flush UI messages if we have a reason to send a notification in the middle of rendering)

@fredizzimo
Copy link
Contributor

No, it is not.

Just out of curiosity, what does it fix, other than optimize things, did someone report performance problems? Reverting something just before a release that has been open for two months without a proper fix, is not a panic revert. But if #27655, indeed fixes something important, then I understand.

might need to flush UI messages if we have a reason to send a notification in the middle of rendering

Please, don't unless you absolutely have to. We already have a lot of problems with the atomicity of the UI protocols, with partial redraws and the mouse getting sent to random positions for example.

@bfredl
Copy link
Member

bfredl commented May 11, 2024

Reverting something just before a release that has been open for two months without a proper fix, is not a panic revert

?? details that identifies this particular crash was reported one hour ago, not two months ago. We will not revert a lot of work in a panic before anyone even has had the change to put together a fix (which is what I am working on).

Please, don't unless you absolutely have to.

Oh, I don't mean introducing any more interleaving than already is. This is just about fixing the data corruption bug that you are seeing with the existing message ordering..

@fredizzimo
Copy link
Contributor

?? details that identifies this particular crash was reported one hour ago, not two months ago. We will not revert a lot of work in a panic before anyone even has had the change to put together a fix (which is what I am working on).

This bug is two months old, and we have reported the same information twice. There were no Neovim logs, but based on the Neovide logs you can draw the same conclusion as you did here, the Neovim side of the logs adds almost no additional information and no-one even asked for them.

It also looks like it's not properly fixed, even for the terminal #27859 (comment)

With the release of 0.10 scheduled for tomorrow, it does not seem worth trying to squeeze in a risky fix, especially if the real-world benefits of #27655, are questionable.

The bug can and probably should be fixed after the release of 0.10.

@justinmk
Copy link
Member

With the release of 0.10 scheduled for tomorrow, it does not seem worth trying to squeeze in a risky fix, especially if the real-world benefits of #27655, are questionable

We can always backport fixes. Releases are only blocked on topics that are "one way doors", not on things that can be fixed in an easily-backwards-compatible way.

@clason
Copy link
Member

clason commented May 11, 2024

And we appreciate the reports, but please let us maintain our project according to our priorities. We are not telling you how to run Neovide, either.

You should also be aware that latching on to an existing (and not identical) bug report will not give you the same visibility as a dedicated issue that provides the necessary information in that issue (not behind a link).

@fredizzimo
Copy link
Contributor

The problem is that this causes a lot of crashes together with Neovide, so it very much affects us too. And I think the reports we have got this far are only the top of the iceberg.

Can you motivate why #27655 is more important than fixing those crashes?

@fredizzimo
Copy link
Contributor

The 0.9.5 series is not stable either btw, since #27348 was never backported. So our current suggestion is to build Neovim from source using this commit 6a580b9

@clason

This comment was marked as resolved.

@fredizzimo

This comment was marked as outdated.

@clason

This comment was marked as outdated.

@PriceHiller
Copy link
Contributor

Sorry to kick off a minor war over in this issue with my report to Neovide.

After seeing a commit by @bfredl (91a4938) and testing it, I am thus far unable to cause any crashes on Neovide in the last 30 minutes of doing my level best do so where previously I could reliably get >20 crashes in that period.

@fredizzimo if anyone else notices crashes, ask them to try a Neovim commit after that and see if they experience crashes then -- feel free to ping me as well on those issues and I'll try to repro on my side.

I'll keep y'all posted if I do encounter another crash over the next 2 - 3 days so this issue can hopefully be closed once and for all.


@bfredl Unfortunately, I'm not smart enough to understand precisely how

if (UI_BUF_SIZE - BUF_POS(ui) < 2 * (1 + 2 + MAX_SCHAR_SIZE + 5 + 5) + 1

guards against this issue in the remote_ui_draw_line method. If you have a moment, would you mind explaining how that padding works around MAX_SCHAR_SIZE? I tried to resolve this bug myself by doing calculations against the ARENA_BLOCK_SIZE and utterly failed. Just interested in what I should've done.

If you don't have a moment, no problem and either way thanks for looking into this 🙂.

@bfredl
Copy link
Member

bfredl commented May 13, 2024

@PriceHiller Thanks for the report and the detailed investigation.

It was a buffer overflow. We calculate the maximum possible size of the next item to be emitted to the buffer but the calculation was wrong (now MAX_SCHAR_SIZE is the maximum size a char can have on the wire, not sizeof(schar_T) )

@fredizzimo
Copy link
Contributor

Thanks, I asked for testing in all three issues we have open for this:

@gpanders gpanders modified the milestones: 0.10, 0.10.1 May 14, 2024
@gpanders
Copy link
Member

Moving to 0.10.1 milestone. #28717 possibly fully resolves this, but even if it does not the behavior was (apparently) present in 0.9.5 as well, so is not a regression. If more fixes are needed they can be backported in 0.10.1, otherwise we can safely close after hearing results from Neovide users.

@PriceHiller
Copy link
Contributor

I still haven't had any crashes with Neovide since the merging of #28717 if that helps.

We'll have to see I guess if any other users face a crash.

@PriceHiller
Copy link
Contributor

Still no crashes to report. I think it's pretty safe to say that #28717 resolved this.

we can safely close after hearing results from Neovide users.

Unfortunately I'm the only really active Neovide user on this issue, so not exactly a big sample size 😅.

@clason
Copy link
Member

clason commented May 18, 2024

That is good enough for us, though :) Let's close this for now; we can always reopen if the (same!) issue pops up again, or open a new issue if the details are different.

Thank you!

@clason clason closed this as completed May 18, 2024
@PriceHiller
Copy link
Contributor

we can always reopen if the (same!) issue pops up again, or open a new issue if the details are different.

If that happens, please ping me. I'll gladly try to debug from my side for something similar or other msgpack related issues.

Neovim has given me a lot of value -- so I'm more more than happy to be a gineau pig.

@pascalporedda
Copy link

I have encountered this issue literally hourly with 0.9.5 that I've been running for the last few months. Now with 0.10.0 now issues so far, and it was quite easy to reproduce on my side before. Because of that I actually moved to some IntelliJ IDE for some time, because it was unbearable.

But now I'm happy to be only back in Neovim, yay! So thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug-crash issue reporting a crash or segfault has:backtrace issue contains a stacktrace/ASAN log has:bisected issue has been tracked to a specific commit needs:repro We need minimal steps to reproduce the issue rpc tui
Projects
None yet
Development

Successfully merging a pull request may close this issue.