summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2012-07-12 20:54:46 +0000
committerDmitry V. Levin <ldv@altlinux.org>2012-07-12 20:54:46 +0000
commitcf53436f737c0273028503186fc0f837c7191085 (patch)
tree9ca6009d02b982d45bf40522a165071e631e8922
parent26bc0606d96d05d30ba263939a0451889340a64c (diff)
downloadstrace-cf53436f737c0273028503186fc0f837c7191085.tar.gz
Close pipe and wait for the pipe process termination
In case of normal strace termination, when the trace output is redirected to a file or a pipe, close it and wait for the pipe process termination. * strace.c (main): Before normal exit, close shared_log when it differs from stderr, and wait for popen_pid termination.
-rw-r--r--strace.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/strace.c b/strace.c
index e6d6d687f..799fce517 100644
--- a/strace.c
+++ b/strace.c
@@ -2214,6 +2214,12 @@ main(int argc, char *argv[])
cleanup();
fflush(NULL);
+ if (shared_log != stderr)
+ fclose(shared_log);
+ if (popen_pid) {
+ while (waitpid(popen_pid, NULL, 0) < 0 && errno == EINTR)
+ ;
+ }
if (exit_code > 0xff) {
/* Avoid potential core file clobbering. */
struct rlimit rlim = {0, 0};