1145467Sdavidxu/*
2145467Sdavidxu * This program tests if a new thread's initial tls data
3145467Sdavidxu * is clean.
4145467Sdavidxu *
5145467Sdavidxu * David Xu <davidxu@freebsd.org>
6145467Sdavidxu *
7145467Sdavidxu * $FreeBSD$
8145467Sdavidxu */
9145467Sdavidxu
10145467Sdavidxu#include <stdio.h>
11145467Sdavidxu#include <pthread.h>
12145468Sdavidxu#include <unistd.h>
13145467Sdavidxu
14145467Sdavidxuint __thread n;
15145467Sdavidxu
16145467Sdavidxuvoid *f1(void *arg)
17145467Sdavidxu{
18145467Sdavidxu	if (n != 0) {
19145467Sdavidxu		printf("bug, n == %d \n", n);
20145467Sdavidxu		exit(1);
21145467Sdavidxu	}
22145468Sdavidxu	n = 1;
23145467Sdavidxu	return (0);
24145467Sdavidxu}
25145467Sdavidxu
26145467Sdavidxuint main()
27145467Sdavidxu{
28145467Sdavidxu	pthread_t td;
29145467Sdavidxu	int i;
30145467Sdavidxu
31145467Sdavidxu	for (i = 0; i < 1000; ++i) {
32145468Sdavidxu		pthread_create(&td, NULL, f1, NULL);
33145467Sdavidxu		pthread_join(td, NULL);
34145467Sdavidxu	}
35145468Sdavidxu	sleep(2);
36145468Sdavidxu	for (i = 0; i < 1000; ++i) {
37145468Sdavidxu		pthread_create(&td, NULL, f1, NULL);
38145468Sdavidxu		pthread_join(td, NULL);
39145468Sdavidxu	}
40145467Sdavidxu	return (0);
41145467Sdavidxu}
42