[systemd-devel] [PATCH 2/2] test: wait for cloned thread to exit
Filipe Brandenburger
filbranden at google.com
Mon Dec 22 11:57:40 PST 2014
Ping?
On Thu, Dec 18, 2014 at 11:24 AM, Filipe Brandenburger
<filbranden at google.com> wrote:
> In test_raw_clone, make sure the cloned thread calls _exit() and in the parent
> thread call waitpid(..., __WCLONE) to wait for the child thread to terminate,
> otherwise there is a race condition where the child thread will log to the
> console after the test process has already exited and the assertion from the
> child thread might not be enforced.
>
> The absence of this patch might also create problems for other tests that would
> be added after this one, since potentially both parent and child would run
> those tests as the child would continue running.
>
> Tested by confirming that the logs from the child are printed before the test
> terminates and that a false assertion in the child aborts the test with a core
> dump.
> ---
> src/test/test-util.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/src/test/test-util.c b/src/test/test-util.c
> index ec04744..997e3df 100644
> --- a/src/test/test-util.c
> +++ b/src/test/test-util.c
> @@ -1325,10 +1325,15 @@ static void test_raw_clone(void) {
> pid2 = raw_getpid();
> log_info("raw_clone: "PID_FMT" getpid()→"PID_FMT" raw_getpid()→"PID_FMT,
> pid, getpid(), pid2);
> - if (pid == 0)
> + if (pid == 0) {
> assert_se(pid2 != parent);
> - else
> + _exit(EXIT_SUCCESS);
> + } else {
> + int status;
> assert_se(pid2 == parent);
> +
> + waitpid(pid, &status, __WCLONE);
> + }
> }
>
> int main(int argc, char *argv[]) {
> --
> 1.8.3.1
>
More information about the systemd-devel
mailing list