lib/igt_core: make single/simple tests use igt_exit

Currently tests that use igt_simple_main will simply call
"exit()" if they pass, making it difficult to ensure that
any required cleanup is done. At present this is not an
issue, but it will be when I submit a patch to turn off the
lowmemorykiller for all tests.

Signed-off-by: Tim Gore <tim.gore@intel.com>
[danvet: Also update api docs.]
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
This commit is contained in:
Tim Gore 2014-09-29 13:34:30 +01:00 committed by Daniel Vetter
parent 32a0308e2d
commit f33fa71481
3 changed files with 10 additions and 10 deletions

View File

@ -641,7 +641,7 @@ bool igt_only_list_subtests(void)
static bool skipped_one = false; static bool skipped_one = false;
static bool succeeded_one = false; static bool succeeded_one = false;
static bool failed_one = false; static bool failed_one = false;
static int igt_exitcode; static int igt_exitcode = IGT_EXIT_SUCCESS;
static void exit_subtest(const char *) __attribute__((noreturn)); static void exit_subtest(const char *) __attribute__((noreturn));
static void exit_subtest(const char *result) static void exit_subtest(const char *result)
@ -692,7 +692,8 @@ void igt_skip(const char *f, ...)
assert(in_fixture); assert(in_fixture);
__igt_fixture_end(); __igt_fixture_end();
} else { } else {
exit(IGT_EXIT_SKIP); igt_exitcode = IGT_EXIT_SKIP;
igt_exit();
} }
} }
@ -786,7 +787,7 @@ void igt_fail(int exitcode)
__igt_fixture_end(); __igt_fixture_end();
} }
exit(exitcode); igt_exit();
} }
} }
@ -838,10 +839,9 @@ void __igt_fail_assert(int exitcode, const char *file,
* everything has worked out. For subtests it also checks that at least one * everything has worked out. For subtests it also checks that at least one
* subtest has been run (save when only listing subtests. * subtest has been run (save when only listing subtests.
* *
* It is an error to normally exit a test with subtests without calling * It is an error to normally exit a test calling igt_exit() - without it the
* igt_exit() - without it the result reporting will be wrong. To avoid such * result reporting will be wrong. To avoid such issues it is highly recommended
* issues it is highly recommended to use #igt_main instead of a hand-rolled * to use #igt_main or #igt_simple_main instead of a hand-rolled main() function.
* main() function.
*/ */
void igt_exit(void) void igt_exit(void)
{ {
@ -857,7 +857,7 @@ void igt_exit(void)
exit(IGT_EXIT_SUCCESS); exit(IGT_EXIT_SUCCESS);
if (!test_with_subtests) if (!test_with_subtests)
exit(IGT_EXIT_SUCCESS); exit(igt_exitcode);
/* Calling this without calling one of the above is a failure */ /* Calling this without calling one of the above is a failure */
assert(skipped_one || succeeded_one || failed_one); assert(skipped_one || succeeded_one || failed_one);

View File

@ -188,7 +188,7 @@ void igt_simple_init_parse_opts(int argc, char **argv,
int main(int argc, char **argv) { \ int main(int argc, char **argv) { \
igt_simple_init(argc, argv); \ igt_simple_init(argc, argv); \
igt_tokencat(__real_main, __LINE__)(); \ igt_tokencat(__real_main, __LINE__)(); \
exit(0); \ igt_exit(); \
} \ } \
static void igt_tokencat(__real_main, __LINE__)(void) \ static void igt_tokencat(__real_main, __LINE__)(void) \

View File

@ -65,7 +65,7 @@ static int do_fork(void)
igt_skip_on_simulation(); igt_skip_on_simulation();
exit(0); igt_exit();
} else { } else {
if (list_subtests) if (list_subtests)
igt_subtest_init(2, argv_list); igt_subtest_init(2, argv_list);