diff options
| author | Maxime Coste <mawww@kakoune.org> | 2018-12-06 20:33:13 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2018-12-06 20:33:13 +1100 |
| commit | b897a18aa6afb0a5f95fd89cfd30664928c8b549 (patch) | |
| tree | 17483d350098836013414d9c4fe3b3e8187e2424 /src | |
| parent | 5f315e68b6b5b9484da244df0ca14aa2fb9c109f (diff) | |
Use a dummy function for SIGPIPE instead of SIG_IGN
SIG_IGN is inherited after 'execve' and requires us to reset
that signal handler, which does not work well with vfork on
OSX. Using an empty function does the trick and will be auto
reset to default on exec.
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cc | 2 | ||||
| -rw-r--r-- | src/shell_manager.cc | 1 |
2 files changed, 1 insertions, 2 deletions
diff --git a/src/main.cc b/src/main.cc index 7ae2098f..43d97f52 100644 --- a/src/main.cc +++ b/src/main.cc @@ -912,7 +912,7 @@ int main(int argc, char* argv[]) set_signal_handler(SIGFPE, signal_handler); set_signal_handler(SIGQUIT, signal_handler); set_signal_handler(SIGTERM, signal_handler); - set_signal_handler(SIGPIPE, SIG_IGN); + set_signal_handler(SIGPIPE, [](int){}); set_signal_handler(SIGINT, [](int){}); set_signal_handler(SIGCHLD, [](int){}); diff --git a/src/shell_manager.cc b/src/shell_manager.cc index e774eb33..065a9f74 100644 --- a/src/shell_manager.cc +++ b/src/shell_manager.cc @@ -177,7 +177,6 @@ std::pair<String, int> ShellManager::eval( Pipe child_stdin{not input.empty()}, child_stdout, child_stderr; pid_t pid = spawn_shell(m_shell.c_str(), cmdline, shell_context.params, kak_env, [&child_stdin, &child_stdout, &child_stderr] { - set_signal_handler(SIGPIPE, SIG_DFL); auto move = [](int oldfd, int newfd) { if (oldfd == newfd) |
