rippled
ThreadSafetyAnalysis.h
1 #ifndef RIPPLE_BASICS_THREAD_SAFTY_ANALYSIS_H_INCLUDED
2 #define RIPPLE_BASICS_THREAD_SAFTY_ANALYSIS_H_INCLUDED
3 
4 #ifdef RIPPLE_ENABLE_THREAD_SAFETY_ANNOTATIONS
5 #define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
6 #else
7 #define THREAD_ANNOTATION_ATTRIBUTE__(x) // no-op
8 #endif
9 
10 #define CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(capability(x))
11 
12 #define SCOPED_CAPABILITY THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
13 
14 #define GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
15 
16 #define PT_GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
17 
18 #define ACQUIRED_BEFORE(...) \
19  THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))
20 
21 #define ACQUIRED_AFTER(...) \
22  THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))
23 
24 #define REQUIRES(...) \
25  THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__))
26 
27 #define REQUIRES_SHARED(...) \
28  THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(__VA_ARGS__))
29 
30 #define ACQUIRE(...) \
31  THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__))
32 
33 #define ACQUIRE_SHARED(...) \
34  THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(__VA_ARGS__))
35 
36 #define RELEASE(...) \
37  THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__))
38 
39 #define RELEASE_SHARED(...) \
40  THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__))
41 
42 #define RELEASE_GENERIC(...) \
43  THREAD_ANNOTATION_ATTRIBUTE__(release_generic_capability(__VA_ARGS__))
44 
45 #define TRY_ACQUIRE(...) \
46  THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__))
47 
48 #define TRY_ACQUIRE_SHARED(...) \
49  THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(__VA_ARGS__))
50 
51 #define EXCLUDES(...) THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
52 
53 #define ASSERT_CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x))
54 
55 #define ASSERT_SHARED_CAPABILITY(x) \
56  THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x))
57 
58 #define RETURN_CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
59 
60 #define NO_THREAD_SAFETY_ANALYSIS \
61  THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
62 
63 #endif