[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