If TEST_F() explicitly calls exit(code) with code different than 0, then _metadata->exit_code is set to this code (e.g. KVM_ONE_VCPU_TEST()). We need to keep in mind that _metadata->exit_code can be KSFT_SKIP while the process exit code is 0.
Unified · Split
| @@ -462,9 +462,13 @@ static inline pid_t clone3_vfork(void) · 461 unmodified lines | ||
| 462 | 462 | munmap(teardown, sizeof(*teardown)); \ |
| 463 | 463 | if (self && fixture_name##_teardown_parent) \ |
| 464 | 464 | munmap(self, sizeof(*self)); \ |
| 465 | − if (!WIFEXITED(status) && WIFSIGNALED(status)) \ | |
| 465 | + if (WIFEXITED(status)) { \ | |
| 466 | + if (WEXITSTATUS(status)) \ | |
| 467 | + _metadata->exit_code = WEXITSTATUS(status); \ | |
| 468 | + } else if (WIFSIGNALED(status)) { \ | |
| 466 | 469 | /* Forward signal to __wait_for_test(). */ \ |
| 467 | 470 | kill(getpid(), WTERMSIG(status)); \ |
| 471 | + } \ | |
| 468 | 472 | __test_check_assert(_metadata); \ |
| 469 | 473 | } \ |
| 470 | 474 | static struct __test_metadata *_##fixture_name##_##test_name##_object; \ |