lib: compute exitcode first

Before we print the exitcode to the debug/kmsg logs, we should inspect
what its final value will be. For example, in the case of running
multiple subtests which all happen to be skipped, igt_exitcode is 0, but
the final exit code will be 77.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Tested-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
This commit is contained in:
Chris Wilson 2016-05-03 11:04:00 +01:00
parent 9f2621e1b5
commit f201495575

View File

@ -1153,10 +1153,22 @@ void igt_exit(void)
exit(IGT_EXIT_INVALID);
}
if (igt_only_list_subtests())
exit(IGT_EXIT_SUCCESS);
/* Calling this without calling one of the above is a failure */
assert(!test_with_subtests ||
skipped_one ||
succeeded_one ||
failed_one);
if (test_with_subtests && !failed_one) {
if (succeeded_one)
igt_exitcode = IGT_EXIT_SUCCESS;
else
igt_exitcode = IGT_EXIT_SKIP;
}
kmsg(KERN_INFO "%s: exiting, ret=%d\n", command_str, igt_exitcode);
igt_debug("Exiting with status code %d\n", igt_exitcode);
@ -1183,19 +1195,11 @@ void igt_exit(void)
result = "FAIL";
}
printf("%s (%.3fs)\n", result, time_elapsed(&subtest_time, &now));
exit(igt_exitcode);
printf("%s (%.3fs)\n",
result, time_elapsed(&subtest_time, &now));
}
/* Calling this without calling one of the above is a failure */
assert(skipped_one || succeeded_one || failed_one);
if (failed_one)
exit(igt_exitcode);
else if (succeeded_one)
exit(IGT_EXIT_SUCCESS);
else
exit(IGT_EXIT_SKIP);
exit(igt_exitcode);
}
/* fork support code */