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