#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <assert.h>


void* pth1(void *args)
{
       pthread_key_t key, key2;
       int value = 1;
       void *getv;

       getv = pthread_getspecific(key);
       assert(getv == NULL);

       pthread_key_create(&key, NULL);
       getv = pthread_getspecific(key);
       assert(getv == NULL);

       pthread_setspecific(key, &value);
       getv = pthread_getspecific(key);
       assert(getv == &value);

       getv = pthread_getspecific(key2);
       assert(getv == NULL);

       pthread_key_delete(key);

       return NULL;
}

int
main()
{
       pthread_t t1;

       pthread_create(&t1, NULL, pth1, NULL);
       pthread_join(t1, NULL);


       return 0;
}