mirror of
https://github.com/neovim/neovim.git
synced 2024-12-23 20:55:18 -07:00
fix: prevent child processes from inheriting ui channel file descriptors
This commit is contained in:
parent
d9235efa76
commit
b400b947f3
@ -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