X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Ftls.h;h=fadce76fb0e442ef4a73101e11bea1b3825ddbd8;hb=707a7ac4b2eb3209fd1b67b1650a8fef5cf7c5e4;hp=ff36155c2ea5741659130b8bc10b4479ff69cb3d;hpb=37b09d7dc2c5956fbd70c211ed164a9ee1f7e349;p=gnulib.git diff --git a/lib/tls.h b/lib/tls.h index ff36155c2..fadce76fb 100644 --- a/lib/tls.h +++ b/lib/tls.h @@ -38,6 +38,9 @@ */ +#ifndef _TLS_H +#define _TLS_H + /* ========================================================================= */ #if USE_POSIX_THREADS @@ -90,25 +93,33 @@ typedef union } gl_tls_key_t; # define gl_tls_key_init(NAME, DESTRUCTOR) \ - if (pthread_in_use ()) \ - { \ - if (pthread_key_create (&(NAME).key, DESTRUCTOR) != 0) \ - abort (); \ - } \ - else \ - (NAME).singlethread_value = NULL + do \ + { \ + if (pthread_in_use ()) \ + { \ + if (pthread_key_create (&(NAME).key, DESTRUCTOR) != 0) \ + abort (); \ + } \ + else \ + (NAME).singlethread_value = NULL; \ + } \ + while (0) # define gl_tls_get(NAME) \ (pthread_in_use () \ ? pthread_getspecific ((NAME).key) \ : (NAME).singlethread_value) # define gl_tls_set(NAME, POINTER) \ - if (pthread_in_use ()) \ - { \ - if (pthread_setspecific ((NAME).key, (POINTER)) != 0) \ - abort (); \ - } \ - else \ - (NAME).singlethread_value = (POINTER) + do \ + { \ + if (pthread_in_use ()) \ + { \ + if (pthread_setspecific ((NAME).key, (POINTER)) != 0) \ + abort (); \ + } \ + else \ + (NAME).singlethread_value = (POINTER); \ + } \ + while (0) # define gl_tls_key_destroy(NAME) \ if (pthread_in_use () && pthread_key_delete ((NAME).key) != 0) \ abort () @@ -151,25 +162,33 @@ typedef union } gl_tls_key_t; # define gl_tls_key_init(NAME, DESTRUCTOR) \ - if (pth_in_use ()) \ - { \ - if (!pth_key_create (&(NAME).key, DESTRUCTOR)) \ - abort (); \ - } \ - else \ - (NAME).singlethread_value = NULL + do \ + { \ + if (pth_in_use ()) \ + { \ + if (!pth_key_create (&(NAME).key, DESTRUCTOR)) \ + abort (); \ + } \ + else \ + (NAME).singlethread_value = NULL; \ + } \ + while (0) # define gl_tls_get(NAME) \ (pth_in_use () \ ? pth_key_getdata ((NAME).key) \ : (NAME).singlethread_value) # define gl_tls_set(NAME, POINTER) \ - if (pth_in_use ()) \ - { \ - if (!pth_key_setdata ((NAME).key, (POINTER))) \ - abort (); \ - } \ - else \ - (NAME).singlethread_value = (POINTER) + do \ + { \ + if (pth_in_use ()) \ + { \ + if (!pth_key_setdata ((NAME).key, (POINTER))) \ + abort (); \ + } \ + else \ + (NAME).singlethread_value = (POINTER); \ + } \ + while (0) # define gl_tls_key_destroy(NAME) \ if (pth_in_use () && !pth_key_delete ((NAME).key)) \ abort () @@ -211,26 +230,34 @@ typedef union } gl_tls_key_t; # define gl_tls_key_init(NAME, DESTRUCTOR) \ - if (thread_in_use ()) \ - { \ - if (thr_keycreate (&(NAME).key, DESTRUCTOR) != 0) \ - abort (); \ - } \ - else \ - (NAME).singlethread_value = NULL + do \ + { \ + if (thread_in_use ()) \ + { \ + if (thr_keycreate (&(NAME).key, DESTRUCTOR) != 0) \ + abort (); \ + } \ + else \ + (NAME).singlethread_value = NULL; \ + } \ + while (0) # define gl_tls_get(NAME) \ (thread_in_use () \ ? glthread_tls_get ((NAME).key) \ : (NAME).singlethread_value) extern void *glthread_tls_get (thread_key_t key); # define gl_tls_set(NAME, POINTER) \ - if (thread_in_use ()) \ - { \ - if (thr_setspecific ((NAME).key, (POINTER)) != 0) \ - abort (); \ - } \ - else \ - (NAME).singlethread_value = (POINTER) + do \ + { \ + if (thread_in_use ()) \ + { \ + if (thr_setspecific ((NAME).key, (POINTER)) != 0) \ + abort (); \ + } \ + else \ + (NAME).singlethread_value = (POINTER); \ + } \ + while (0) # define gl_tls_key_destroy(NAME) \ /* Unsupported. */ \ (void)0 @@ -284,3 +311,7 @@ typedef struct (void)0 #endif + +/* ========================================================================= */ + +#endif /* _TLS_H */