root/maint/gnulib/lib/pthread-tss.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. pthread_key_create
  2. pthread_setspecific
  3. pthread_getspecific
  4. pthread_key_delete
  5. pthread_key_create
  6. pthread_setspecific
  7. pthread_getspecific
  8. pthread_key_delete

   1 /* POSIX thread-specific storage.
   2    Copyright (C) 2010-2021 Free Software Foundation, Inc.
   3 
   4    This file is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU Lesser General Public License as
   6    published by the Free Software Foundation; either version 2.1 of the
   7    License, or (at your option) any later version.
   8 
   9    This file is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12    GNU Lesser General Public License for more details.
  13 
  14    You should have received a copy of the GNU Lesser General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 /* Written by Bruno Haible <bruno@clisp.org>, 2019.  */
  18 
  19 #include <config.h>
  20 
  21 /* Specification.  */
  22 #include <pthread.h>
  23 
  24 #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS
  25 # include "windows-tls.h"
  26 #else
  27 # include <stdlib.h>
  28 #endif
  29 
  30 #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS
  31 /* Use Windows threads.  */
  32 
  33 int
  34 pthread_key_create (pthread_key_t *keyp, void (*destructor) (void *))
     /* [previous][next][first][last][top][bottom][index][help] */
  35 {
  36   return glwthread_tls_key_create (keyp, destructor);
  37 }
  38 
  39 int
  40 pthread_setspecific (pthread_key_t key, const void *value)
     /* [previous][next][first][last][top][bottom][index][help] */
  41 {
  42   return glwthread_tls_set (key, (void *) value);
  43 }
  44 
  45 void *
  46 pthread_getspecific (pthread_key_t key)
     /* [previous][next][first][last][top][bottom][index][help] */
  47 {
  48   return glwthread_tls_get (key);
  49 }
  50 
  51 int
  52 pthread_key_delete (pthread_key_t key)
     /* [previous][next][first][last][top][bottom][index][help] */
  53 {
  54   return glwthread_tls_key_delete (key);
  55 }
  56 
  57 #elif HAVE_PTHREAD_H
  58 /* Provide workarounds for POSIX threads.  */
  59 
  60 #else
  61 /* Provide a dummy implementation for single-threaded applications.  */
  62 
  63 int
  64 pthread_key_create (pthread_key_t *keyp, void (*destructor) (void *))
     /* [previous][next][first][last][top][bottom][index][help] */
  65 {
  66   pthread_key_t key = (void **) malloc (sizeof (void *));
  67   if (key == NULL)
  68     return ENOMEM;
  69   *key = NULL;
  70   *keyp = key;
  71   return 0;
  72 }
  73 
  74 int
  75 pthread_setspecific (pthread_key_t key, const void *value)
     /* [previous][next][first][last][top][bottom][index][help] */
  76 {
  77   *key = (void *) value;
  78   return 0;
  79 }
  80 
  81 void *
  82 pthread_getspecific (pthread_key_t key)
     /* [previous][next][first][last][top][bottom][index][help] */
  83 {
  84   return *key;
  85 }
  86 
  87 int
  88 pthread_key_delete (pthread_key_t key)
     /* [previous][next][first][last][top][bottom][index][help] */
  89 {
  90   free (key);
  91   return 0;
  92 }
  93 
  94 #endif

/* [previous][next][first][last][top][bottom][index][help] */