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> 12292142Sngie#include <stdlib.h> 13145468Sdavidxu#include <unistd.h> 14145467Sdavidxu 15145467Sdavidxuint __thread n; 16145467Sdavidxu 17292142Sngievoid 18292142Sngie*f1(void *arg) 19145467Sdavidxu{ 20145467Sdavidxu if (n != 0) { 21145467Sdavidxu printf("bug, n == %d \n", n); 22145467Sdavidxu exit(1); 23145467Sdavidxu } 24145468Sdavidxu n = 1; 25145467Sdavidxu return (0); 26145467Sdavidxu} 27145467Sdavidxu 28292142Sngieint 29292142Sngiemain(void) 30145467Sdavidxu{ 31145467Sdavidxu pthread_t td; 32145467Sdavidxu int i; 33145467Sdavidxu 34145467Sdavidxu for (i = 0; i < 1000; ++i) { 35145468Sdavidxu pthread_create(&td, NULL, f1, NULL); 36145467Sdavidxu pthread_join(td, NULL); 37145467Sdavidxu } 38145468Sdavidxu sleep(2); 39145468Sdavidxu for (i = 0; i < 1000; ++i) { 40145468Sdavidxu pthread_create(&td, NULL, f1, NULL); 41145468Sdavidxu pthread_join(td, NULL); 42145468Sdavidxu } 43145467Sdavidxu return (0); 44145467Sdavidxu} 45