| |
| #ifndef TEST_COMMON_C_H |
| #define TEST_COMMON_C_H |
| |
| |
| #if defined(__GNUC__) && defined(__SUPPORT_TS_ANNOTATION__) |
| |
| #define LOCKABLE __attribute__ ((lockable)) |
| #define SCOPED_LOCKABLE __attribute__ ((scoped_lockable)) |
| #define GUARDED_BY(x) __attribute__ ((guarded_by(x))) |
| #define GUARDED_VAR __attribute__ ((guarded)) |
| #define PT_GUARDED_BY(x) __attribute__ ((point_to_guarded_by(x))) |
| #define PT_GUARDED_VAR __attribute__ ((point_to_guarded)) |
| #define ACQUIRED_AFTER(...) __attribute__ ((acquired_after(__VA_ARGS__))) |
| #define ACQUIRED_BEFORE(...) __attribute__ ((acquired_before(__VA_ARGS__))) |
| #define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__ ((exclusive_lock(__VA_ARGS__))) |
| #define SHARED_LOCK_FUNCTION(...) __attribute__ ((shared_lock(__VA_ARGS__))) |
| #define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__ ((exclusive_trylock(__VA_ARGS__))) |
| #define SHARED_TRYLOCK_FUNCTION(...) __attribute__ ((shared_trylock(__VA_ARGS__))) |
| #define UNLOCK_FUNCTION(...) __attribute__ ((unlock(__VA_ARGS__))) |
| #define LOCK_RETURNED(x) __attribute__ ((lock_returned(x))) |
| #define LOCKS_EXCLUDED(...) __attribute__ ((locks_excluded(__VA_ARGS__))) |
| #define EXCLUSIVE_LOCKS_REQUIRED(...) \ |
| __attribute__ ((exclusive_locks_required(__VA_ARGS__))) |
| #define SHARED_LOCKS_REQUIRED(...) \ |
| __attribute__ ((shared_locks_required(__VA_ARGS__))) |
| #define NO_THREAD_SAFETY_ANALYSIS __attribute__ ((no_thread_safety_analysis)) |
| |
| #else |
| |
| #define LOCKABLE |
| #define SCOPED_LOCKABLE |
| #define GUARDED_BY(x) |
| #define GUARDED_VAR |
| #define PT_GUARDED_BY(x) |
| #define PT_GUARDED_VAR |
| #define ACQUIRED_AFTER(...) |
| #define ACQUIRED_BEFORE(...) |
| #define EXCLUSIVE_LOCK_FUNCTION(...) |
| #define SHARED_LOCK_FUNCTION(...) |
| #define EXCLUSIVE_TRYLOCK_FUNCTION(...) |
| #define SHARED_TRYLOCK_FUNCTION(...) |
| #define UNLOCK_FUNCTION(...) |
| #define LOCK_RETURNED(x) |
| #define LOCKS_EXCLUDED(...) |
| #define EXCLUSIVE_LOCKS_REQUIRED(...) |
| #define SHARED_LOCKS_REQUIRED(...) |
| #define NO_THREAD_SAFETY_ANALYSIS |
| |
| #endif // defined(__GNUC__) && defined(SUPPORT_TS_ANNOTATION) |
| |
| struct LOCKABLE Mutex { |
| int mu_; |
| }; |
| |
| #endif // TEST_COMMON_C_H |