mirror of
https://github.com/neovim/neovim.git
synced 2024-09-17 20:58:20 -04:00
Merge pull request #28157 from fredizzimo/fsundvik/fix-io
fix: prevent child processes from inheriting ui channel file descriptors
This commit is contained in:
commit
ab0d3c4098
@ -544,8 +544,12 @@ uint64_t channel_from_stdio(bool rpc, CallbackReader on_output, const char **err
|
||||
}
|
||||
#else
|
||||
if (embedded_mode) {
|
||||
stdin_dup_fd = dup(STDIN_FILENO);
|
||||
stdout_dup_fd = dup(STDOUT_FILENO);
|
||||
// In embedded mode redirect stdout and stdin to stderr, since they are used for the UI channel.
|
||||
// NOTE: fnctl with F_DUPFD_CLOEXEC is used instead of dup to prevent child processes from
|
||||
// inheriting the file descriptors, which make it impossible for UIs to detect when nvim exits
|
||||
// while one or more of its child processes are still running.
|
||||
stdin_dup_fd = fcntl(STDIN_FILENO, F_DUPFD_CLOEXEC, STDERR_FILENO + 1);
|
||||
stdout_dup_fd = fcntl(STDOUT_FILENO, F_DUPFD_CLOEXEC, STDERR_FILENO + 1);
|
||||
dup2(STDERR_FILENO, STDOUT_FILENO);
|
||||
dup2(STDERR_FILENO, STDIN_FILENO);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user