Back to index

glibc  2.9
tst-key1.c
Go to the documentation of this file.
00001 /* Copyright (C) 2002 Free Software Foundation, Inc.
00002    This file is part of the GNU C Library.
00003    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #include <limits.h>
00021 #include <pthread.h>
00022 #include <stdio.h>
00023 #include <stdlib.h>
00024 #include <unistd.h>
00025 
00026 
00027 int
00028 do_test (void)
00029 {
00030   int max;
00031 #ifdef PTHREAD_KEYS_MAX
00032   max = PTHREAD_KEYS_MAX;
00033 #else
00034   max = _POSIX_THREAD_KEYS_MAX;
00035 #endif
00036   pthread_key_t *keys = alloca (max * sizeof (pthread_key_t));
00037 
00038   int i;
00039   for (i = 0; i < max; ++i)
00040     if (pthread_key_create (&keys[i], NULL) != 0)
00041       {
00042        write (2, "key_create failed\n", 18);
00043        _exit (1);
00044       }
00045     else
00046       {
00047        printf ("created key %d\n", i);
00048 
00049        if (pthread_setspecific (keys[i], (const void *) (i + 100l)) != 0)
00050          {
00051            write (2, "setspecific failed\n", 19);
00052            _exit (1);
00053          }
00054       }
00055 
00056   for (i = 0; i < max; ++i)
00057     {
00058       if (pthread_getspecific (keys[i]) != (void *) (i + 100l))
00059        {
00060          write (2, "getspecific failed\n", 19);
00061          _exit (1);
00062        }
00063 
00064       if (pthread_key_delete (keys[i]) != 0)
00065        {
00066          write (2, "key_delete failed\n", 18);
00067          _exit (1);
00068        }
00069     }
00070 
00071   /* Now it must be once again possible to allocate keys.  */
00072   if (pthread_key_create (&keys[0], NULL) != 0)
00073     {
00074       write (2, "2nd key_create failed\n", 22);
00075       _exit (1);
00076     }
00077 
00078   if (pthread_key_delete (keys[0]) != 0)
00079     {
00080       write (2, "2nd key_delete failed\n", 22);
00081       _exit (1);
00082     }
00083 
00084   return 0;
00085 }
00086 
00087 
00088 #define TEST_FUNCTION do_test ()
00089 #include "../test-skeleton.c"