diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-04-04 14:27:09 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-04-09 13:44:32 +0100 |
commit | 1c0fffc401cdb581a93d16d225f53c83359ff209 (patch) | |
tree | 7b5b8896a789e0874ebdcc53cac252c71f6a8979 /meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch | |
parent | d3ffbebf43c23faa43af81c9ecf6fcaef36d675b (diff) | |
download | openembedded-core-1c0fffc401cdb581a93d16d225f53c83359ff209.tar.gz |
ptest-runner: Add several logging fixes
This change adds three patches to improve the handling of stdout/stderr and child
processes to try and improve logging reliability in ptest-runner.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch')
-rw-r--r-- | meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch b/meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch new file mode 100644 index 0000000000..f7c3ebe6f2 --- /dev/null +++ b/meta/recipes-support/ptest-runner/ptest-runner/0003-utils-Ensure-pipes-are-read-after-exit.patch @@ -0,0 +1,76 @@ +From e58e4e1a7f854953f823dc5135d35f728f253f31 Mon Sep 17 00:00:00 2001 +From: Richard Purdie <richard.purdie@linuxfoundation.org> +Date: Thu, 4 Apr 2019 14:24:14 +0100 +Subject: [PATCH 3/3] utils: Ensure pipes are read after exit + +There was a race in the code where the pipes may not be read after the process has exited +and data may be left behind in them. This change to ordering ensures the pipes are read +after the exit code has been read meaning no data can be left behind and the logs should +be complete. + +Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> +Upstream-Status: Pending [code being tested] +--- + utils.c | 29 ++++++++++++++++------------- + 1 file changed, 16 insertions(+), 13 deletions(-) + +diff --git a/utils.c b/utils.c +index c5b3b8d..37e88ab 100644 +--- a/utils.c ++++ b/utils.c +@@ -264,6 +264,7 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, pid_t group, + struct pollfd pfds[2]; + struct timespec sentinel; + clockid_t clock = CLOCK_MONOTONIC; ++ int looping = 1; + int r; + + int status; +@@ -281,9 +282,23 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, pid_t group, + + *timeouted = 0; + +- while (1) { ++ while (looping) { + waitflags = WNOHANG; + ++ if (timeout >= 0) { ++ struct timespec time; ++ ++ clock_gettime(clock, &time); ++ if ((time.tv_sec - sentinel.tv_sec) > timeout) { ++ *timeouted = 1; ++ kill(-pid, SIGKILL); ++ waitflags = 0; ++ } ++ } ++ ++ if (waitpid(pid, &status, waitflags) == pid) ++ looping = 0; ++ + r = poll(pfds, 2, WAIT_CHILD_POLL_TIMEOUT_MS); + if (r > 0) { + char buf[WAIT_CHILD_BUF_MAX_SIZE]; +@@ -303,19 +318,7 @@ wait_child(const char *ptest_dir, const char *run_ptest, pid_t pid, pid_t group, + } + + clock_gettime(clock, &sentinel); +- } else if (timeout >= 0) { +- struct timespec time; +- +- clock_gettime(clock, &time); +- if ((time.tv_sec - sentinel.tv_sec) > timeout) { +- *timeouted = 1; +- kill(-pid, SIGKILL); +- waitflags = 0; +- } + } +- +- if (waitpid(pid, &status, waitflags) == pid) +- break; + } + + fflush(fps[0]); +-- +2.17.1 + |