]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/thread/detail/thread_safety.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / thread / detail / thread_safety.hpp
1 #ifndef BOOST_THREAD_DETAIL_THREAD_SAFETY_HPP
2 #define BOOST_THREAD_DETAIL_THREAD_SAFETY_HPP
3
4 #if defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__)
5 //
6 // This is horrible, but it seems to be the only we can shut up the
7 // "anonymous variadic macros were introduced in C99 [-Wvariadic-macros]"
8 // warning that get spewed out otherwise in non-C++11 mode.
9 //
10 #pragma GCC system_header
11 #endif
12
13 // See https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
14
15 // Un-comment to enable Thread Safety Analysis
16 //#define BOOST_THREAD_ENABLE_THREAD_SAFETY_ANALYSIS
17
18 // Enable thread safety attributes only with clang.
19 // The attributes can be safely erased when compiling with other compilers.
20 #if defined (BOOST_THREAD_ENABLE_THREAD_SAFETY_ANALYSIS) && defined(__clang__) && (!defined(SWIG))
21 #define BOOST_THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
22 #else
23 #define BOOST_THREAD_ANNOTATION_ATTRIBUTE__(x) // no-op
24 #endif
25
26 #define BOOST_THREAD_CAPABILITY(x) \
27 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(capability(x))
28
29 #define BOOST_THREAD_SCOPED_CAPABILITY \
30 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
31
32 #define BOOST_THREAD_GUARDED_BY(x) \
33 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
34
35 #define BOOST_THREAD_PT_GUARDED_BY(x) \
36 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
37
38 #define BOOST_THREAD_ACQUIRED_BEFORE(...) \
39 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))
40
41 #define BOOST_THREAD_ACQUIRED_AFTER(...) \
42 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))
43
44 #define BOOST_THREAD_REQUIRES(...) \
45 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__))
46
47 #define BOOST_THREAD_REQUIRES_SHARED(...) \
48 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(__VA_ARGS__))
49
50 #define BOOST_THREAD_ACQUIRE(...) \
51 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__))
52
53 #define BOOST_THREAD_ACQUIRE_SHARED(...) \
54 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(__VA_ARGS__))
55
56 #define BOOST_THREAD_RELEASE(...) \
57 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__))
58
59 #define BOOST_THREAD_RELEASE_SHARED(...) \
60 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__))
61
62 #define BOOST_THREAD_TRY_ACQUIRE(...) \
63 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__))
64
65 #define BOOST_THREAD_TRY_ACQUIRE_SHARED(...) \
66 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(__VA_ARGS__))
67
68 #define BOOST_THREAD_EXCLUDES(...) \
69 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
70
71 #define BOOST_THREAD_ASSERT_CAPABILITY(x) \
72 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x))
73
74 #define BOOST_THREAD_ASSERT_SHARED_CAPABILITY(x) \
75 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x))
76
77 #define BOOST_THREAD_RETURN_CAPABILITY(x) \
78 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
79
80 #define BOOST_THREAD_NO_THREAD_SAFETY_ANALYSIS \
81 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
82
83 #if defined(__clang__) && (!defined(SWIG)) && defined(__FreeBSD__)
84 #if __has_attribute(no_thread_safety_analysis)
85 #define BOOST_THREAD_DISABLE_THREAD_SAFETY_ANALYSIS __attribute__((no_thread_safety_analysis))
86 #else
87 #define BOOST_THREAD_DISABLE_THREAD_SAFETY_ANALYSIS
88 #endif
89 #else
90 #define BOOST_THREAD_DISABLE_THREAD_SAFETY_ANALYSIS
91 #endif
92
93 #ifdef USE_LOCK_STYLE_THREAD_SAFETY_ATTRIBUTES
94 // The original version of thread safety analysis the following attribute
95 // definitions. These use a lock-based terminology. They are still in use
96 // by existing thread safety code, and will continue to be supported.
97
98 // Deprecated.
99 #define BOOST_THREAD_PT_GUARDED_VAR \
100 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_var)
101
102 // Deprecated.
103 #define BOOST_THREAD_GUARDED_VAR \
104 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(guarded_var)
105
106 // Replaced by REQUIRES
107 #define BOOST_THREAD_EXCLUSIVE_LOCKS_REQUIRED(...) \
108 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(__VA_ARGS__))
109
110 // Replaced by REQUIRES_SHARED
111 #define BOOST_THREAD_SHARED_LOCKS_REQUIRED(...) \
112 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(__VA_ARGS__))
113
114 // Replaced by CAPABILITY
115 #define BOOST_THREAD_LOCKABLE \
116 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lockable)
117
118 // Replaced by SCOPED_CAPABILITY
119 #define BOOST_THREAD_SCOPED_LOCKABLE \
120 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
121
122 // Replaced by ACQUIRE
123 #define BOOST_THREAD_EXCLUSIVE_LOCK_FUNCTION(...) \
124 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(__VA_ARGS__))
125
126 // Replaced by ACQUIRE_SHARED
127 #define BOOST_THREAD_SHARED_LOCK_FUNCTION(...) \
128 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(__VA_ARGS__))
129
130 // Replaced by RELEASE and RELEASE_SHARED
131 #define BOOST_THREAD_UNLOCK_FUNCTION(...) \
132 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(__VA_ARGS__))
133
134 // Replaced by TRY_ACQUIRE
135 #define BOOST_THREAD_EXCLUSIVE_TRYLOCK_FUNCTION(...) \
136 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock_function(__VA_ARGS__))
137
138 // Replaced by TRY_ACQUIRE_SHARED
139 #define BOOST_THREAD_SHARED_TRYLOCK_FUNCTION(...) \
140 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock_function(__VA_ARGS__))
141
142 // Replaced by ASSERT_CAPABILITY
143 #define BOOST_THREAD_ASSERT_EXCLUSIVE_LOCK(...) \
144 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_exclusive_lock(__VA_ARGS__))
145
146 // Replaced by ASSERT_SHARED_CAPABILITY
147 #define BOOST_THREAD_ASSERT_SHARED_LOCK(...) \
148 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_lock(__VA_ARGS__))
149
150 // Replaced by EXCLUDE_CAPABILITY.
151 #define BOOST_THREAD_LOCKS_EXCLUDED(...) \
152 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
153
154 // Replaced by RETURN_CAPABILITY
155 #define BOOST_THREAD_LOCK_RETURNED(x) \
156 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
157
158 #endif // USE_LOCK_STYLE_THREAD_SAFETY_ATTRIBUTES
159
160 #endif // BOOST_THREAD_DETAIL_THREAD_SAFETY_HPP