NetBSD-5.0.2/regress/lib/libpthread/detach1/detach1.c

Compare this file to the similar file:
Show the results in this format:

/*	$NetBSD: detach1.c,v 1.1 2005/01/21 11:54:24 yamt Exp $	*/

#include <err.h>
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define	NITER	100000

void *func(void *);
int main(void);

void *
func(void *dummy)
{

	return NULL;
}

int
main()
{
	int i;

	for (i = 0; i < NITER; i++) {
		pthread_t t;
		int error;

		if (pthread_create(&t, NULL, func, NULL)) {
			/*
			 * sleep and retry once for the case that
			 * the child threads are not finished yet.
			 */
			printf("%d sleeping...\n", i);
			sleep(10);
			if (pthread_create(&t, NULL, func, NULL))
				err(1, "create");
		}

		if (i & 1)
			sched_yield(); /* give a chance thread to finish */
		if (pthread_detach(t))
			err(1, "detach");

		error = pthread_join(t, NULL);
		if (error != ESRCH && error != EINVAL) {
			printf("unexpected error %d\n", error);
			exit(3);
		}
	}

	exit(0);
}