summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer2020-05-16 16:27:51 +0000
committerMatthias Schiffer2020-05-16 16:27:51 +0000
commit077feb5b5824beb3af28385d350e2398ffe46f27 (patch)
tree0acd505e6b2d754948679c3b0d26a5f2e60719dd
parent7ec4bb764e1eb58f5d499d3b47f97bfc9a09eb0a (diff)
downloaducert-077feb5b5824beb3af28385d350e2398ffe46f27.tar.gz
usign-exec: close writing end of pipe early in parent process
When the child process exited without producing output (for example because usign was not found), the parent process would hang forever in read(). By closing the writing end early in the parent process, read will return as soon as no writing FDs are left - that is, when the child process has exited. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
-rw-r--r--usign-exec.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/usign-exec.c b/usign-exec.c
index c9aecf9..0dde81e 100644
--- a/usign-exec.c
+++ b/usign-exec.c
@@ -136,6 +136,8 @@ static int usign_f(char fingerprint[17], const char *pubkeyfile, const char *sec
_exit(1);
}
+ close(fds[1]);
+
waitpid(pid, &status, 0);
status = WEXITSTATUS(status);
if (fingerprint && !WEXITSTATUS(status)) {
@@ -149,7 +151,6 @@ static int usign_f(char fingerprint[17], const char *pubkeyfile, const char *sec
}
close(fds[0]);
- close(fds[1]);
return status;
}