aboutsummaryrefslogtreecommitdiff
path: root/runtime/syntax/gitcommit.vim
diff options
context:
space:
mode:
authorMatt Widmann <mw@mattwidmann.net>2017-11-25 13:59:07 -0800
committerMatt Widmann <mw@mattwidmann.net>2017-11-25 13:59:07 -0800
commit0f9c90e0edd27d2db04d48e7bd98bb46d2c4a918 (patch)
treec4c750d6464fa203f5cee03155a51f2d4f406cad /runtime/syntax/gitcommit.vim
parentd9b3ebfede6439aab4148c4bbf117b8950ed6aa0 (diff)
downloadrneovim-0f9c90e0edd27d2db04d48e7bd98bb46d2c4a918.tar.gz
rneovim-0f9c90e0edd27d2db04d48e7bd98bb46d2c4a918.tar.bz2
rneovim-0f9c90e0edd27d2db04d48e7bd98bb46d2c4a918.zip
io: retry fgets on EINTR (#7632)
The calls to `fgets` in `src/nvim/if_cscope.c` (and elsewhere) can show communication errors to the user if a signal is delivered during its system calls. For plugins that proxy subprocess output into cscope requests, a `SIGCHLD` might *always* interfere with calls into `fgets`. To see this in a debugger, put a breakpoint on `cs_reading_emsg` and watch signals come in (with lldb, using `process handle --notify true --pass true`). Next, run a subcommand from neovim that calls through cscope when it returns. A tag picker plugin, like vim-picker and fzy, with `cscopetag` and `cscopetagorder=0` set, reproduced this reliably. The breakpoint will hit after a `SIGCHLD` is delivered, and `errno` will be set to 4, `EINTR`. The caller of `fgets` should retry when `NULL` is returned with `errno` set to `EINTR`.
Diffstat (limited to 'runtime/syntax/gitcommit.vim')
0 files changed, 0 insertions, 0 deletions