X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=urcu%2Ftls-compat.h;h=8ac1ea0615ddc2eb91ee51e9e15b89bd094d4c81;hp=a44b88d03066a5d5a847491496fe430f820b6ef9;hb=ae62f05acabbf4cbb2877331befd57ee168a5587;hpb=3343c545bbc5154d42dd37cd3ae869ef97555e00 diff --git a/urcu/tls-compat.h b/urcu/tls-compat.h index a44b88d..8ac1ea0 100644 --- a/urcu/tls-compat.h +++ b/urcu/tls-compat.h @@ -74,6 +74,10 @@ extern "C" { #else /* #ifndef CONFIG_RCU_TLS */ +/* + * The *_1() macros ensure macro parameters are expanded. + */ + # include struct urcu_tls { @@ -82,14 +86,16 @@ struct urcu_tls { int init_done; }; -# define DECLARE_URCU_TLS(type, name) \ +# define DECLARE_URCU_TLS_1(type, name) \ type *__tls_access_ ## name(void) +# define DECLARE_URCU_TLS(type, name) \ + DECLARE_URCU_TLS_1(type, name) /* * Note: we don't free memory at process exit, since it will be dealt * with by the OS. */ -# define DEFINE_URCU_TLS(type, name) \ +# define DEFINE_URCU_TLS_1(type, name) \ type *__tls_access_ ## name(void) \ { \ static struct urcu_tls __tls_ ## name = { \ @@ -118,7 +124,12 @@ struct urcu_tls { return __tls_p; \ } -# define URCU_TLS(name) (*__tls_access_ ## name()) +# define DEFINE_URCU_TLS(type, name) \ + DEFINE_URCU_TLS_1(type, name) + +# define URCU_TLS_1(name) (*__tls_access_ ## name()) + +# define URCU_TLS(name) URCU_TLS_1(name) #endif /* #else #ifndef CONFIG_RCU_TLS */