From b897a18aa6afb0a5f95fd89cfd30664928c8b549 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Thu, 6 Dec 2018 20:33:13 +1100 Subject: [PATCH] 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. --- src/main.cc | 2 +- src/shell_manager.cc | 1 - 2 files changed, 1 insertion(+), 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 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)