summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@samsung.com>2018-07-25 10:56:23 -0500
committerDerek Foreman <derek.foreman.samsung@gmail.com>2018-07-25 10:56:23 -0500
commit6fbcff15db98d18e9c867c36d1cb1770cba4299d (patch)
treeb5e8e6321db8fc9b2060a8c8333323a3e5e76b1b
parent4bdac206d27fc973c836730562ed07bb9f259bad (diff)
downloadefl-6fbcff15db98d18e9c867c36d1cb1770cba4299d.tar.gz
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
-rw-r--r--src/tests/efl_check.h31
1 files 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