Vim-fork focused on extensibility and usability
Go to file
Justin M. Keyes 32ad52ae04
TUI: Skip redundant "stop" event (macOS kernel panic) (#9007)
When the TUI suspends (:suspend, CTRL-z) it calls tui_terminal_stop (but
does NOT set `ui->data=NULL`, so `tui_is_stopped` returns false). If the
host terminal dies, it sends SIGCONT, SIGHUP (usually in that order):

    ERROR 2018-09-16T19:30:17.065 25821 suspend_event:1153: SIGCONT
    ERROR 2018-09-16T19:30:17.065 25821 on_signal:162: SIGHUP
    ERROR 2018-09-16T19:30:17.155 25821 on_signal:162: SIGHUP

Race: if SIGHUP is handled before SIGCONT, it calls ui_builtin_stop()
which schedules tui_stop before the TUI was resumed?

libuv uv_close() aborts if the handle is already closed/closing.
Somehow that causes macOS to panic. #8075

    Assertion failed: (!uv__is_closing(handle)), function uv_close, file src/unix/core.c, line 117.

    Thread 0:: Dispatch queue: com.apple.main-thread
    0   libsystem_kernel.dylib        	0x00007fff67d69ec2 kevent + 10
    1   libuv.1.dylib                 	0x000000010609304d uv__io_poll + 892
    2   libuv.1.dylib                 	0x0000000106083904 uv_run + 339
    3   nvim                          	0x0000000105e76f7b loop_poll_events + 74
    4   nvim                          	0x0000000105fa5f51 ui_bridge_stop + 206
    5   nvim                          	0x0000000105fa4c00 ui_builtin_stop + 50
    6   nvim                          	0x0000000105f26ee9 mch_exit + 29
    7   nvim                          	0x0000000105eda84a getout + 518
    8   nvim                          	0x0000000105e778b3 multiqueue_process_events + 77
    9   nvim                          	0x0000000105f24c5a os_breakcheck + 49
    10  nvim                          	0x0000000105eb7ea3 auto_next_pat + 463
    11  nvim                          	0x0000000105eb7603 apply_autocmds_group + 1289
    12  nvim                          	0x0000000105eb0e8d apply_autocmds + 36
    13  nvim                          	0x0000000105f5a412 screenalloc + 1892
    14  nvim                          	0x0000000105f5b223 screen_resize + 190
    15  nvim                          	0x0000000105fa52e3 ui_refresh + 257
    16  nvim                          	0x0000000105e8c3d9 do_cmdline + 6614
    17  nvim                          	0x0000000105f03a72 normal_execute + 3996
    18  nvim                          	0x0000000105f89925 state_enter + 164
    19  nvim                          	0x0000000105efe08d normal_enter + 125
    20  nvim                          	0x0000000105ed9ffd main + 6858
    21  libdyld.dylib                 	0x00007fff67c19115 start + 1

    Thread 1 Crashed:
    0   libsystem_kernel.dylib        	0x00007fff67d68e3e __pthread_kill + 10
    1   libsystem_pthread.dylib       	0x00007fff67ea7150 pthread_kill + 333
    2   libsystem_c.dylib             	0x00007fff67cc5312 abort + 127
    3   libsystem_c.dylib             	0x00007fff67c8d368 __assert_rtn + 320
    4   libuv.1.dylib                 	0x00000001060835bf uv_close + 247
    5   nvim                          	0x0000000105fa0ebb tui_terminal_stop + 221
    6   nvim                          	0x0000000105f9ff3d tui_stop + 14
    7   nvim                          	0x0000000105e778b3 multiqueue_process_events + 77
    8   nvim                          	0x0000000105fa0c89 tui_main + 302
    9   libsystem_pthread.dylib       	0x00007fff67ea46c1 _pthread_body + 340
    10  libsystem_pthread.dylib       	0x00007fff67ea456d _pthread_start + 377
    11  libsystem_pthread.dylib       	0x00007fff67ea3c5d thread_start + 13

TODO:
- Set `ui->data = NULL` to flag UI as "stopped"? But loop_poll_events
  drains *all* fast_events, so could skip some events...
2018-09-18 08:16:38 +02:00
busted/outputHandlers test: Dump $NVIM_LOG_FILE contents (#8926) 2018-08-28 22:13:34 +02:00
ci CI/AppVeyor: Disable gcov build for PRs 2018-09-04 21:19:30 +02:00
cmake build/test: skip empty TEST_TAG, TEST_FILTER 2018-06-16 02:12:35 +02:00
config *: Add some PVS comments 2018-04-15 20:07:07 +03:00
contrib contrib: fix local.mk.example (#8286) 2018-04-16 21:21:44 +02:00
man Ex mode: use getexline() instead of getexmodeline() 2018-06-17 14:50:53 +02:00
runtime runtime/colors: move check_colors.vim to runtime/tools 2018-09-16 17:08:23 -04:00
scripts vim-patch.sh: Also check for .git/ directory 2018-08-21 08:37:49 +02:00
snap dist: snap packaging #7918 2018-01-29 23:02:15 +01:00
src TUI: Skip redundant "stop" event (macOS kernel panic) (#9007) 2018-09-18 08:16:38 +02:00
test buffer: add support for virtual text annotations 2018-09-17 10:41:29 +02:00
third-party deps: update libvterm 2018-09-04 10:41:51 +02:00
unicode Update unicode files 2018-07-10 06:53:11 -04:00
.editorconfig editorconfig: Makefile uses 8-width tab indent 2018-08-23 13:47:15 -04:00
.gitignore makedeps.bat 2018-06-06 00:58:57 +02:00
.travis.yml build/CMake: find_package(… REQUIRED) 2018-06-06 00:58:57 +02:00
appveyor.yml ci/AppVeyor: enable MSVC_32 build 2018-03-26 10:54:44 -05:00
BACKERS.md Update backer URL 2015-11-11 19:50:33 -08:00
BSDmakefile build: show a hint for BSD make (#7275) 2017-09-16 10:54:49 +02:00
CMakeLists.txt cmake: bump API version 2018-07-25 14:09:04 +10:00
codecov.yml CI/Codecov: disable changes status 2018-09-09 19:12:32 +02:00
CONTRIBUTING.md doc: job/channel, misc #7783 2018-06-11 00:08:27 +02:00
ISSUE_TEMPLATE.md doc: ISSUE_TEMPLATE.md 2017-07-08 14:59:06 +02:00
LICENSE LICENSE: add LuaJIT notice. #899 2014-06-30 13:59:56 -04:00
Makefile cmake: add "generated-sources" target 2018-09-06 20:54:53 +02:00
README.md doc: README: "Transitioning from Vim" note (#8763) 2018-07-23 03:06:27 +02:00

Neovim

Wiki | Documentation | Twitter | Community | Gitter Chat

Travis Build Status AppVeyor Build status codecov Coverity Scan Build Clang Scan Build PVS-studio Check

Packages Debian CI Downloads

Neovim is a project that seeks to aggressively refactor Vim in order to:

See the wiki and Roadmap for more information.

Throughput Graph

Features

See :help nvim-features for the full list!

Install from source

make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install

To install to a non-default location, set CMAKE_INSTALL_PREFIX:

make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=/full/path/"
make install

To list all targets:

cmake --build build --target help

To skip "bundled" dependencies define USE_BUNDLED_DEPS=NO (CMake option: USE_BUNDLED=NO).

See the wiki for details.

Install from package

Pre-built packages for Windows, macOS, and Linux are found at the Releases page.

Managed packages are in Homebrew, Debian, Ubuntu, Fedora, Arch Linux, Gentoo, and more!

Transitioning from Vim

See :help nvim-from-vim for instructions.

Project layout

├─ ci/              build automation
├─ cmake/           build scripts
├─ runtime/         user plugins/docs
├─ src/             application source code (see src/nvim/README.md)
│  ├─ api/          API subsystem
│  ├─ eval/         VimL subsystem
│  ├─ event/        event-loop subsystem
│  ├─ generators/   code generation (pre-compilation)
│  ├─ lib/          generic data structures
│  ├─ lua/          lua subsystem
│  ├─ msgpack_rpc/  RPC subsystem
│  ├─ os/           low-level platform code
│  └─ tui/          built-in UI
├─ third-party/     cmake subproject to build dependencies
└─ test/            tests (see test/README.md)

License

Neovim is licensed under the terms of the Apache 2.0 license, except for parts that were contributed under the Vim license.

  • Contributions committed before b17d96 remain under the Vim license.

  • Contributions committed after b17d96 are licensed under Apache 2.0 unless those contributions were copied from Vim (identified in the commit logs by the vim-patch token).

See LICENSE for details.

Vim is Charityware.  You can use and copy it as much as you like, but you are
encouraged to make a donation for needy children in Uganda.  Please see the
kcc section of the vim docs or visit the ICCF web site, available at these URLs:

        http://iccf-holland.org/
        http://www.vim.org/iccf/
        http://www.iccf.nl/

You can also sponsor the development of Vim.  Vim sponsors can vote for
features.  The money goes to Uganda anyway.