From: Richard Purdie <richard.pur...@linuxfoundation.org>

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 <richard.pur...@linuxfoundation.org>
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 6e453a1..9fab6f2 100644
--- a/utils.c
+++ b/utils.c
@@ -316,8 +316,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);
@@ -336,7 +339,7 @@ wait_child(const char *ptest_dir, const char *run_ptest, 
pid_t pid,
                        break;
        }
 
-
+       fflush(fps[0]);
        return status;
 }
 
-- 
2.17.0

-- 
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to