#include <pthread.h>
#include "test.h"
__thread int tls_fix = 23;
__thread int tls_zero;
static void *f(void *arg)
{
if (tls_fix != 23)
t_error("fixed init failed: want 23 got %d\n", tls_fix);
if (tls_zero != 0)
t_error("zero init failed: want 0 got %d\n", tls_zero);
tls_fix++;
tls_zero++;
return 0;
}
#define CHECK(f) do{ if(f) t_error("%s failed.\n", #f); }while(0)
#define length(a) (sizeof(a)/sizeof*(a))
int main()
{
pthread_t t[5];
int i, j;
if (tls_fix != 23)
t_error("fixed init failed: want 23 got %d\n", tls_fix);
if (tls_zero != 0)
t_error("zero init failed: want 0 got %d\n", tls_zero);
for (j = 0; j < 2; j++) {
for (i = 0; i < length(t); i++) {
CHECK(pthread_create(t+i, 0, f, 0));
tls_fix++;
tls_zero++;
}
for (i = 0; i < length(t); i++)
CHECK(pthread_join(t[i], 0));
}
return t_status;
}