summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-12-06 20:33:13 +1100
committerMaxime Coste <mawww@kakoune.org>2018-12-06 20:33:13 +1100
commitb897a18aa6afb0a5f95fd89cfd30664928c8b549 (patch)
tree17483d350098836013414d9c4fe3b3e8187e2424 /src
parent5f315e68b6b5b9484da244df0ca14aa2fb9c109f (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.cc2
-rw-r--r--src/shell_manager.cc1
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)