Why "Close pipe and wait for the pipe process termination"?

Denys Vlasenko dvlasenk at redhat.com
Thu Sep 13 07:55:43 UTC 2012


Hi Dmitry,

Why is the below change necessary?
Was there any bad behavior in this area before it?


commit cf53436f737c0273028503186fc0f837c7191085
Author: Dmitry V. Levin <ldv at altlinux.org>
Date:   Thu Jul 12 20:54:46 2012 +0000

    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.

diff --git a/strace.c b/strace.c
index e6d6d68..799fce5 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};





More information about the Strace-devel mailing list