Esempio n. 1
0
static void
wait_twoproc_test(void)
{
	semid_t id;
	int stat;

	if (ksem_open(&id, TEST_PATH, O_CREAT, 0777, 0)) {
		fail_errno("ksem_open");
		return;
	}

	if (schedule_post(id, 500) < 0) {
		ksem_close(id);
		ksem_unlink(TEST_PATH);
		return;
	}		

	if (child_worker(wait_twoproc_child, NULL, &stat) < 0) {
		check_alarm(1);
		ksem_close(id);
		ksem_unlink(TEST_PATH);
		return;
	}

	errno = CSTAT_ERROR(stat);
	switch (CSTAT_CLASS(stat)) {
	case 0:
		pass();
		break;
	case 1:
		fail_errno("child ksem_open()");
		break;
	case 2:
		fail_errno("child ksem_wait()");
		break;
	case 3:
		fail_errno("child ksem_close()");
		break;
	default:
		fail_err("bad child state %#x", stat);
		break;
	}

	check_alarm(1);
	ksem_close(id);
	ksem_unlink(TEST_PATH);
}
Esempio n. 2
0
/*
 * Attempt a ksem_open() that should fail with an expected error of
 * 'error'.
 */
static void
ksem_open_should_fail(const char *path, int flags, mode_t mode, unsigned int
    value, int error)
{
	semid_t id;

	if (ksem_open(&id, path, flags, mode, value) >= 0) {
		fail_err("ksem_open() didn't fail");
		ksem_close(id);
		return;
	}
	if (errno != error) {
		fail_errno("ksem_open");
		return;
	}
	pass();
}
Esempio n. 3
0
static void
open_after_unlink(void)
{
	semid_t id;

	if (ksem_open(&id, TEST_PATH, O_CREAT, 0777, 1) < 0) {
		fail_errno("ksem_open(1)");
		return;
	}
	ksem_close(id);

	if (ksem_unlink(TEST_PATH) < 0) {
		fail_errno("ksem_unlink");
		return;
	}

	ksem_open_should_fail(TEST_PATH, O_RDONLY, 0777, 1, ENOENT);
}
Esempio n. 4
0
static int
exhaust_named_child(void *arg)
{
	char buffer[64];
	semid_t id;
	int i, max;

	max = (intptr_t)arg;
	for (i = 0; i < max + 1; i++) {
		snprintf(buffer, sizeof(buffer), "%s%d", TEST_PATH, i);
		if (ksem_open(&id, buffer, O_CREAT, 0777, 1) < 0) {
			if (errno == ENOSPC || errno == EMFILE ||
			    errno == ENFILE)
				return (CSTAT(0, 0));
			return (CSTAT(1, errno));
		}
	}
	return (CSTAT(2, errno));
}
Esempio n. 5
0
static void
open_named_semaphore(void)
{
	semid_t id;

	if (ksem_open(&id, TEST_PATH, O_CREAT, 0777, 1) < 0) {
		fail_errno("ksem_open(O_CREAT)");
		return;
	}

	if (ksem_close(id) < 0) {
		fail_errno("ksem_close");
		return;
	}

	if (ksem_unlink(TEST_PATH) < 0) {
		fail_errno("ksem_unlink");
		return;
	}
	pass();
}