blob: 051b66af8fb4ee67151ece447e0611b2725e7a91 [file] [log] [blame]
Andrew Geisslerc5535c92023-01-27 16:10:19 -06001From 30ce5ccd62446349d432ff65d3fe8d46872423c8 Mon Sep 17 00:00:00 2001
Brad Bishopd7bf8c12018-02-25 22:55:05 -05002From: Yi Zhao <yi.zhao@windriver.com>
3Date: Wed, 18 Jan 2017 14:59:39 +0800
4Subject: [PATCH] fix error for expansion of macro in thread.h
5
6The parameter declaration is missing in expansion of macro
7which cause the build error:
8| In file included from src/freeradius-devel/libradius.h:80:0,
9| from src/lib/log.c:26:
10| src/lib/log.c: In function '__fr_thread_local_destroy_fr_strerror_buffer':
11| src/lib/log.c:37:31: error: 'fr_strerror_buffer' undeclared (first use in this function)
12| fr_thread_local_setup(char *, fr_strerror_buffer) /* macro */
13| ^
14
15Add the missing declaration in macro.
16
17Upstream-Status: Pending
18
19Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
20---
21 src/include/threads.h | 10 +++++-----
22 1 file changed, 5 insertions(+), 5 deletions(-)
23
24diff --git a/src/include/threads.h b/src/include/threads.h
Andrew Geisslerc5535c92023-01-27 16:10:19 -060025index e36d81dac0..2bcb6aadcb 100644
Brad Bishopd7bf8c12018-02-25 22:55:05 -050026--- a/src/include/threads.h
27+++ b/src/include/threads.h
28@@ -89,7 +89,7 @@ static _t __fr_thread_local_init_##_n(pthread_destructor_t func)\
29 # define fr_thread_local_get(_n) _n
30 #elif defined(HAVE_PTHREAD_H)
31 # include <pthread.h>
32-# define fr_thread_local_setup(_t, _n) \
33+# define fr_thread_local_setup(_t, _n) static __thread _t _n;\
34 static pthread_key_t __fr_thread_local_key_##_n;\
35 static pthread_once_t __fr_thread_local_once_##_n = PTHREAD_ONCE_INIT;\
36 static pthread_destructor_t __fr_thread_local_destructor_##_n = NULL;\
37@@ -100,17 +100,17 @@ static void __fr_thread_local_destroy_##_n(UNUSED void *unused)\
38 static void __fr_thread_local_key_init_##_n(void)\
39 {\
40 (void) pthread_key_create(&__fr_thread_local_key_##_n, __fr_thread_local_destroy_##_n);\
41- (void) pthread_setspecific(__fr_thread_local_key_##_n, &(_n));\
42 }\
43 static _t __fr_thread_local_init_##_n(pthread_destructor_t func)\
44 {\
45 __fr_thread_local_destructor_##_n = func;\
46 if (_n) return _n; \
47 (void) pthread_once(&__fr_thread_local_once_##_n, __fr_thread_local_key_init_##_n);\
48+ (void) pthread_setspecific(__fr_thread_local_key_##_n, &(_n));\
49 return _n;\
50 }
51-# define fr_thread_local_init(_n, _f) __fr_thread_local_init_##_n(_f)
52-# define fr_thread_local_set(_n, _v) __fr_thread_local_set_##_n(_v)
53-# define fr_thread_local_get(_n) __fr_thread_local_get_##_n()
54+# define fr_thread_local_init(_n, _f) __fr_thread_local_init_##_n(_f)
55+# define fr_thread_local_set(_n, _v) ((int)!((_n = _v) || 1))
56+# define fr_thread_local_get(_n) _n
57 #endif
58 #endif
59--
Andrew Geisslerc5535c92023-01-27 16:10:19 -0600602.25.1
Brad Bishopd7bf8c12018-02-25 22:55:05 -050061