|
15 | 15 | // See https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
|
16 | 16 | // for documentation. The clang compiler can do advanced static analysis
|
17 | 17 | // of locking when given the -Wthread-safety option.
|
18 |
| -#define LOCKABLE __attribute__((lockable)) |
| 18 | +#define LOCKABLE __attribute__((capability(""))) |
19 | 19 | #define SCOPED_LOCKABLE __attribute__((scoped_lockable))
|
20 | 20 | #define GUARDED_BY(x) __attribute__((guarded_by(x)))
|
21 | 21 | #define PT_GUARDED_BY(x) __attribute__((pt_guarded_by(x)))
|
22 | 22 | #define ACQUIRED_AFTER(...) __attribute__((acquired_after(__VA_ARGS__)))
|
23 | 23 | #define ACQUIRED_BEFORE(...) __attribute__((acquired_before(__VA_ARGS__)))
|
24 |
| -#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__((exclusive_lock_function(__VA_ARGS__))) |
25 |
| -#define SHARED_LOCK_FUNCTION(...) __attribute__((shared_lock_function(__VA_ARGS__))) |
26 |
| -#define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__((exclusive_trylock_function(__VA_ARGS__))) |
27 |
| -#define SHARED_TRYLOCK_FUNCTION(...) __attribute__((shared_trylock_function(__VA_ARGS__))) |
28 |
| -#define UNLOCK_FUNCTION(...) __attribute__((unlock_function(__VA_ARGS__))) |
| 24 | +#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__((acquire_capability(__VA_ARGS__))) |
| 25 | +#define SHARED_LOCK_FUNCTION(...) __attribute__((acquire_shared_capability(__VA_ARGS__))) |
| 26 | +#define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__((try_acquire_capability(__VA_ARGS__))) |
| 27 | +#define SHARED_TRYLOCK_FUNCTION(...) __attribute__((try_acquire_shared_capability(__VA_ARGS__))) |
| 28 | +#define UNLOCK_FUNCTION(...) __attribute__((release_capability(__VA_ARGS__))) |
| 29 | +#define SHARED_UNLOCK_FUNCTION(...) __attribute__((release_shared_capability(__VA_ARGS__))) |
29 | 30 | #define LOCK_RETURNED(x) __attribute__((lock_returned(x)))
|
30 | 31 | #define LOCKS_EXCLUDED(...) __attribute__((locks_excluded(__VA_ARGS__)))
|
31 |
| -#define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__((exclusive_locks_required(__VA_ARGS__))) |
32 |
| -#define SHARED_LOCKS_REQUIRED(...) __attribute__((shared_locks_required(__VA_ARGS__))) |
| 32 | +#define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__((requires_capability(__VA_ARGS__))) |
| 33 | +#define SHARED_LOCKS_REQUIRED(...) __attribute__((requires_shared_capability(__VA_ARGS__))) |
33 | 34 | #define NO_THREAD_SAFETY_ANALYSIS __attribute__((no_thread_safety_analysis))
|
34 |
| -#define ASSERT_EXCLUSIVE_LOCK(...) __attribute__((assert_exclusive_lock(__VA_ARGS__))) |
| 35 | +#define ASSERT_EXCLUSIVE_LOCK(...) __attribute__((assert_capability(__VA_ARGS__))) |
35 | 36 | #else
|
36 | 37 | #define LOCKABLE
|
37 | 38 | #define SCOPED_LOCKABLE
|
|
44 | 45 | #define EXCLUSIVE_TRYLOCK_FUNCTION(...)
|
45 | 46 | #define SHARED_TRYLOCK_FUNCTION(...)
|
46 | 47 | #define UNLOCK_FUNCTION(...)
|
| 48 | +#define SHARED_UNLOCK_FUNCTION(...) |
47 | 49 | #define LOCK_RETURNED(x)
|
48 | 50 | #define LOCKS_EXCLUDED(...)
|
49 | 51 | #define EXCLUSIVE_LOCKS_REQUIRED(...)
|
|
0 commit comments