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