--- BDB/xthread.h 2013/12/18 02:52:34 1.13 +++ BDB/xthread.h 2016/02/02 04:07:06 1.14 @@ -168,5 +168,18 @@ #endif +#if __linux && __GNUC__ >= 4 && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 3 && 0 /* also check arch */ +/* __thread has little to no advantage over pthread_* in most configurations, so this is not used */ +# define X_TLS_DECLARE(varname) __thread void *varname +# define X_TLS_INIT(varname) +# define X_TLS_SET(varname,value) varname = (value) +# define X_TLS_GET(varname) varname +#else +# define X_TLS_DECLARE(varname) pthread_key_t varname +# define X_TLS_INIT(varname) do { if (pthread_key_create (&(varname), 0)) abort (); } while (0) +# define X_TLS_SET(varname,value) pthread_setspecific (varname, (value)) +# define X_TLS_GET(varname) pthread_getspecific (varname) +#endif + #endif