From 6fbcff15db98d18e9c867c36d1cb1770cba4299d Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 25 Jul 2018 10:56:23 -0500 Subject: [PATCH] tests: check WIFEXITED to determine if test exited before using exit status Summary: the exit status value is not valid unless the process has terminated normally by calling exit() or _exit(), so only use the status if this is true. otherwise mark the process as a failed test Depends on D6597 Reviewers: ManMower Reviewed By: ManMower Subscribers: cedric, #committers Tags: #efl_tests Differential Revision: https://phab.enlightenment.org/D6600 --- src/tests/efl_check.h | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/tests/efl_check.h b/src/tests/efl_check.h index 1d9942feb3..e3218ccc29 100644 --- a/src/tests/efl_check.h +++ b/src/tests/efl_check.h @@ -245,6 +245,21 @@ _efl_suite_run_end(SRunner *sr, const char *name) return failed_count; } +#ifdef HAVE_FORK +EINA_UNUSED static int +_efl_suite_wait_on_fork(int *num_forks) +{ + int status = 0, ret; + waitpid(0, &status, 0); + if (WIFEXITED(status)) + ret = WEXITSTATUS(status); + else + ret = 1; + (*num_forks)--; + return ret; +} +#endif + EINA_UNUSED static int _efl_suite_build_and_run(int argc, const char **argv, const char *suite_name, const Efl_Test_Case *etc, SFun init, SFun shutdown) { @@ -279,15 +294,7 @@ _efl_suite_build_and_run(int argc, const char **argv, const char *suite_name, co if (do_fork && can_fork) { if (num_forks == eina_cpu_count()) - { - do - { - int status = 0; - waitpid(0, &status, 0); - failed_count += WEXITSTATUS(status); - num_forks--; - } while (0); - } + failed_count += _efl_suite_wait_on_fork(&num_forks); pid = fork(); if (pid > 0) { @@ -330,10 +337,8 @@ _efl_suite_build_and_run(int argc, const char **argv, const char *suite_name, co { do { - int status = 0; - waitpid(0, &status, 0); - failed_count += WEXITSTATUS(status); - } while (--num_forks); + failed_count += _efl_suite_wait_on_fork(&num_forks); + } while (num_forks); } else #endif