Blame test/teardowns.c

Packit d3489f
/* SPDX-License-Identifier: MIT */
Packit d3489f
#include <stdint.h>
Packit d3489f
#include <stdio.h>
Packit d3489f
#include <stdlib.h>
Packit d3489f
#include <string.h>
Packit d3489f
#include <sys/syscall.h>
Packit d3489f
#include <sys/types.h>
Packit d3489f
#include <sys/wait.h>
Packit d3489f
#include <unistd.h>
Packit d3489f
#include <errno.h>
Packit d3489f
Packit d3489f
#include "liburing.h"
Packit d3489f
Packit d3489f
static void loop(void)
Packit d3489f
{
Packit d3489f
	int i, ret = 0;
Packit d3489f
Packit d3489f
	for (i = 0; i < 100; i++) {
Packit d3489f
		struct io_uring ring;
Packit d3489f
		int fd;
Packit d3489f
Packit d3489f
		memset(&ring, 0, sizeof(ring));
Packit d3489f
		fd = io_uring_queue_init(0xa4, &ring, 0);
Packit d3489f
		if (fd >= 0) {
Packit d3489f
			close(fd);
Packit d3489f
			continue;
Packit d3489f
		}
Packit d3489f
		if (fd != -ENOMEM)
Packit d3489f
			ret++;
Packit d3489f
	}
Packit d3489f
	exit(ret);
Packit d3489f
}
Packit d3489f
Packit d3489f
int main(int argc, char *argv[])
Packit d3489f
{
Packit d3489f
	int i, ret, status;
Packit d3489f
Packit d3489f
	if (argc > 1)
Packit d3489f
		return 0;
Packit d3489f
Packit d3489f
	for (i = 0; i < 12; i++) {
Packit d3489f
		if (!fork()) {
Packit d3489f
			loop();
Packit d3489f
			break;
Packit d3489f
		}
Packit d3489f
	}
Packit d3489f
Packit d3489f
	ret = 0;
Packit d3489f
	for (i = 0; i < 12; i++) {
Packit d3489f
		if (waitpid(-1, &status, 0) < 0) {
Packit d3489f
			perror("waitpid");
Packit d3489f
			return 1;
Packit d3489f
		}
Packit d3489f
		if (WEXITSTATUS(status))
Packit d3489f
			ret++;
Packit d3489f
	}
Packit d3489f
Packit d3489f
	return ret;
Packit d3489f
}