summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2021-02-18 10:54:58 -0800
committerThiago Macieira <thiago.macieira@intel.com>2021-02-22 18:12:25 +0000
commit31849db9c678597ce1f7b86fa6b0d34541aa69fd (patch)
tree9d9c5850f952ac1b7330a93cc1649a87340e09b7
parentbcc80f4e21aeae268a0a1c6d821a72542c7ab628 (diff)
QProcess::startDetached/Unix: fix the resetting of SIGPIPE
This should have been SIG_DFL, as we're about to execute a child process. It's the child's responsibility to ignore SIGPIPE if it wants to, or get killed by it when it writes to an pipe with no readers. Qt itself does this for its own purposes (see qt_ignore_sigpipe() [until I can get some time to teach Linux about O_NOSIGPIPE]). Therefore, we ought to reset what we've done. Change-Id: Ic90d8429a0eb4837971dfffd166585a686790dde Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> (cherry picked from commit f4e3b073b3d2a50133d734dd604bff21f061a3e6)
-rw-r--r--src/corelib/io/qprocess_unix.cpp6
1 files changed, 1 insertions, 5 deletions
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 8c6a095844..f235ab1320 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -911,11 +911,7 @@ bool QProcessPrivate::startDetached(qint64 *pid)
pid_t childPid = fork();
if (childPid == 0) {
- struct sigaction noaction;
- memset(&noaction, 0, sizeof(noaction));
- noaction.sa_handler = SIG_IGN;
- ::sigaction(SIGPIPE, &noaction, nullptr);
-
+ ::signal(SIGPIPE, SIG_DFL); // reset the signal that we ignored
::setsid();
qt_safe_close(startedPipe[0]);