This source file includes following definitions.
- pthread_mutexattr_init
 
- pthread_mutexattr_gettype
 
- pthread_mutexattr_settype
 
- pthread_mutexattr_getrobust
 
- pthread_mutexattr_setrobust
 
- pthread_mutexattr_destroy
 
- pthread_mutexattr_getrobust
 
- pthread_mutexattr_setrobust
 
- pthread_mutex_init
 
- pthread_mutex_lock
 
- pthread_mutex_trylock
 
- pthread_mutex_timedlock
 
- pthread_mutex_unlock
 
- pthread_mutex_destroy
 
- pthread_mutex_init
 
- pthread_mutex_lock
 
- pthread_mutex_trylock
 
- pthread_mutex_timedlock
 
- pthread_mutex_unlock
 
- pthread_mutex_destroy
 
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 #include <config.h>
  20 
  21 
  22 #include <pthread.h>
  23 
  24 #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS
  25 # include "windows-timedmutex.h"
  26 # include "windows-timedrecmutex.h"
  27 #else
  28 # include <stdlib.h>
  29 #endif
  30 
  31 #if ((defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS) || !HAVE_PTHREAD_H
  32 
  33 int
  34 pthread_mutexattr_init (pthread_mutexattr_t *attr)
     
  35 {
  36   *attr = (PTHREAD_MUTEX_STALLED << 2) | PTHREAD_MUTEX_DEFAULT;
  37   return 0;
  38 }
  39 
  40 int
  41 pthread_mutexattr_gettype (const pthread_mutexattr_t *attr, int *typep)
     
  42 {
  43   *typep = *attr & (PTHREAD_MUTEX_DEFAULT | PTHREAD_MUTEX_NORMAL
  44                     | PTHREAD_MUTEX_ERRORCHECK | PTHREAD_MUTEX_RECURSIVE);
  45   return 0;
  46 }
  47 
  48 int
  49 pthread_mutexattr_settype (pthread_mutexattr_t *attr, int type)
     
  50 {
  51   if (!(type == PTHREAD_MUTEX_DEFAULT
  52         || type == PTHREAD_MUTEX_NORMAL
  53         || type == PTHREAD_MUTEX_ERRORCHECK
  54         || type == PTHREAD_MUTEX_RECURSIVE))
  55     return EINVAL;
  56   *attr ^= (*attr ^ type)
  57            & (PTHREAD_MUTEX_DEFAULT | PTHREAD_MUTEX_NORMAL
  58               | PTHREAD_MUTEX_ERRORCHECK | PTHREAD_MUTEX_RECURSIVE);
  59   return 0;
  60 }
  61 
  62 int
  63 pthread_mutexattr_getrobust (const pthread_mutexattr_t *attr, int *robustp)
     
  64 {
  65   *robustp = (*attr >> 2) & (PTHREAD_MUTEX_STALLED | PTHREAD_MUTEX_ROBUST);
  66   return 0;
  67 }
  68 
  69 int
  70 pthread_mutexattr_setrobust (pthread_mutexattr_t *attr, int robust)
     
  71 {
  72   if (!(robust == PTHREAD_MUTEX_STALLED || robust == PTHREAD_MUTEX_ROBUST))
  73     return EINVAL;
  74   *attr ^= (*attr ^ (robust << 2))
  75            & ((PTHREAD_MUTEX_STALLED | PTHREAD_MUTEX_ROBUST) << 2);
  76   return 0;
  77 }
  78 
  79 int
  80 pthread_mutexattr_destroy (_GL_UNUSED pthread_mutexattr_t *attr)
     
  81 {
  82   return 0;
  83 }
  84 
  85 #elif PTHREAD_MUTEXATTR_ROBUST_UNIMPLEMENTED
  86 
  87 int
  88 pthread_mutexattr_getrobust (const pthread_mutexattr_t *attr, int *robustp)
     
  89 {
  90   *robustp = PTHREAD_MUTEX_STALLED;
  91   return 0;
  92 }
  93 
  94 int
  95 pthread_mutexattr_setrobust (pthread_mutexattr_t *attr, int robust)
     
  96 {
  97   if (!(robust == PTHREAD_MUTEX_STALLED || robust == PTHREAD_MUTEX_ROBUST))
  98     return EINVAL;
  99   if (!(robust == PTHREAD_MUTEX_STALLED))
 100     return ENOTSUP;
 101   return 0;
 102 }
 103 
 104 #endif
 105 
 106 #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS
 107 
 108 
 109 int
 110 pthread_mutex_init (pthread_mutex_t *mutex, const pthread_mutexattr_t *attr)
     
 111 {
 112   
 113 
 114   if (attr != NULL
 115       && (*attr & (PTHREAD_MUTEX_DEFAULT | PTHREAD_MUTEX_NORMAL
 116                    | PTHREAD_MUTEX_ERRORCHECK | PTHREAD_MUTEX_RECURSIVE))
 117          == PTHREAD_MUTEX_RECURSIVE)
 118     {
 119       mutex->type = 2;
 120       return glwthread_timedrecmutex_init (&mutex->u.u_timedrecmutex);
 121     }
 122   else
 123     {
 124       mutex->type = 1;
 125       return glwthread_timedmutex_init (&mutex->u.u_timedmutex);
 126     }
 127 }
 128 
 129 int
 130 pthread_mutex_lock (pthread_mutex_t *mutex)
     
 131 {
 132   switch (mutex->type)
 133     {
 134     case 1:
 135       return glwthread_timedmutex_lock (&mutex->u.u_timedmutex);
 136     case 2:
 137       return glwthread_timedrecmutex_lock (&mutex->u.u_timedrecmutex);
 138     default:
 139       abort ();
 140     }
 141 }
 142 
 143 int
 144 pthread_mutex_trylock (pthread_mutex_t *mutex)
     
 145 {
 146   switch (mutex->type)
 147     {
 148     case 1:
 149       return glwthread_timedmutex_trylock (&mutex->u.u_timedmutex);
 150     case 2:
 151       return glwthread_timedrecmutex_trylock (&mutex->u.u_timedrecmutex);
 152     default:
 153       abort ();
 154     }
 155 }
 156 
 157 int
 158 pthread_mutex_timedlock (pthread_mutex_t *mutex, const struct timespec *abstime)
     
 159 {
 160   switch (mutex->type)
 161     {
 162     case 1:
 163       return glwthread_timedmutex_timedlock (&mutex->u.u_timedmutex, abstime);
 164     case 2:
 165       return glwthread_timedrecmutex_timedlock (&mutex->u.u_timedrecmutex,
 166                                                 abstime);
 167     default:
 168       abort ();
 169     }
 170 }
 171 
 172 int
 173 pthread_mutex_unlock (pthread_mutex_t *mutex)
     
 174 {
 175   switch (mutex->type)
 176     {
 177     case 1:
 178       return glwthread_timedmutex_unlock (&mutex->u.u_timedmutex);
 179     case 2:
 180       return glwthread_timedrecmutex_unlock (&mutex->u.u_timedrecmutex);
 181     default:
 182       abort ();
 183     }
 184 }
 185 
 186 int
 187 pthread_mutex_destroy (pthread_mutex_t *mutex)
     
 188 {
 189   switch (mutex->type)
 190     {
 191     case 1:
 192       return glwthread_timedmutex_destroy (&mutex->u.u_timedmutex);
 193     case 2:
 194       return glwthread_timedrecmutex_destroy (&mutex->u.u_timedrecmutex);
 195     default:
 196       abort ();
 197     }
 198 }
 199 
 200 #elif HAVE_PTHREAD_H
 201 
 202 
 203 
 204 
 205 
 206 #else
 207 
 208 
 209 int
 210 pthread_mutex_init (_GL_UNUSED pthread_mutex_t *mutex,
     
 211                     _GL_UNUSED const pthread_mutexattr_t *attr)
 212 {
 213   
 214   return 0;
 215 }
 216 
 217 int
 218 pthread_mutex_lock (_GL_UNUSED pthread_mutex_t *mutex)
     
 219 {
 220   
 221 
 222   return 0;
 223 }
 224 
 225 int
 226 pthread_mutex_trylock (_GL_UNUSED pthread_mutex_t *mutex)
     
 227 {
 228   
 229 
 230   return 0;
 231 }
 232 
 233 int
 234 pthread_mutex_timedlock (_GL_UNUSED pthread_mutex_t *mutex,
     
 235                          _GL_UNUSED const struct timespec *abstime)
 236 {
 237   
 238 
 239   return 0;
 240 }
 241 
 242 int
 243 pthread_mutex_unlock (_GL_UNUSED pthread_mutex_t *mutex)
     
 244 {
 245   
 246 
 247 
 248   return 0;
 249 }
 250 
 251 int
 252 pthread_mutex_destroy (_GL_UNUSED pthread_mutex_t *mutex)
     
 253 {
 254   
 255   return 0;
 256 }
 257 
 258 #endif