blob: e87d1dc190ffc33b33566be5819319e3453b749a [file] [log] [blame]
/* 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;
}