/* 12.t
- ioctx access across fork() (12.t)
 */
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>

#include "aio_setup.h"

void test_child(void)
{
	int res;
	res = attempt_io_submit(io_ctx, 0, NULL, -EINVAL);
	fflush(stdout);
	_exit(res);
}

int test_main(void)
{
	int res, status;
	pid_t pid;
	sigset_t set;

	if (attempt_io_submit(io_ctx, 0, NULL, 0))
		return 1;

	sigemptyset(&set);
	sigaddset(&set, SIGCHLD);
	sigprocmask(SIG_BLOCK, &set, NULL);

	fflush(NULL);
	pid = fork();				assert(pid != -1);

	if (pid == 0)
		test_child();

	res = waitpid(pid, &status, 0);

	if (WIFEXITED(status)) {
		int failed = (WEXITSTATUS(status) != 0);
		printf("child exited with status %d%s\n", WEXITSTATUS(status),
			failed ? " -- FAILED" : "");
		return failed;
	}

	/* anything else: failed */
	if (WIFSIGNALED(status))
		printf("child killed by signal %d -- FAILED.\n",
			WTERMSIG(status));

	return 1;
}
