blob: c9a9dd7cf49fe8b54f4f44d2e7b33395cccc801c [file] [log] [blame]
Brad Bishopd89cb5f2019-04-10 09:02:41 -04001From 9b36993794c1de733c521b2477370c874c07b617 Mon Sep 17 00:00:00 2001
2From: Richard Purdie <richard.purdie@linuxfoundation.org>
3Date: Thu, 4 Apr 2019 14:18:55 +0100
4Subject: [PATCH 1/3] utils: Ensure stdout/stderr are flushed
5
6There is no guarantee that the data written with fwrite will be flushed to the
7buffer. If stdout and stderr are the same thing, this could lead to interleaved
8writes. The common case is stdout output so flush the output pipes when writing to
9stderr. Also flush stdout before the function returns.
10
11Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
12Upstream-Status: Pending [code being tested]
13---
14 utils.c | 7 +++++--
15 1 file changed, 5 insertions(+), 2 deletions(-)
16
17diff --git a/utils.c b/utils.c
18index 504df0b..3ceb342 100644
19--- a/utils.c
20+++ b/utils.c
21@@ -295,8 +295,11 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid,
22 }
23
24 if (pfds[1].revents != 0) {
25- while ((n = read(fds[1], buf, WAIT_CHILD_BUF_MAX_SIZE)) > 0)
26+ while ((n = read(fds[1], buf, WAIT_CHILD_BUF_MAX_SIZE)) > 0) {
27+ fflush(fps[0]);
28 fwrite(buf, n, 1, fps[1]);
29+ fflush(fps[1]);
30+ }
31 }
32
33 clock_gettime(clock, &sentinel);
34@@ -315,7 +318,7 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid,
35 break;
36 }
37
38-
39+ fflush(fps[0]);
40 return status;
41 }
42
43--
442.17.1
45