From 9b36993794c1de733c521b2477370c874c07b617 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 4 Apr 2019 14:18:55 +0100 Subject: [PATCH 1/3] utils: Ensure stdout/stderr are flushed There is no guarantee that the data written with fwrite will be flushed to the buffer. If stdout and stderr are the same thing, this could lead to interleaved writes. The common case is stdout output so flush the output pipes when writing to stderr. Also flush stdout before the function returns. Signed-off-by: Richard Purdie Upstream-Status: Pending [code being tested] --- utils.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/utils.c b/utils.c index 504df0b..3ceb342 100644 --- a/utils.c +++ b/utils.c @@ -295,8 +295,11 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, } if (pfds[1].revents != 0) { - while ((n = read(fds[1], buf, WAIT_CHILD_BUF_MAX_SIZE)) > 0) + while ((n = read(fds[1], buf, WAIT_CHILD_BUF_MAX_SIZE)) > 0) { + fflush(fps[0]); fwrite(buf, n, 1, fps[1]); + fflush(fps[1]); + } } clock_gettime(clock, &sentinel); @@ -315,7 +318,7 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, break; } - + fflush(fps[0]); return status; } -- 2.17.1