llarp/util/thread/annotations.hpp
Defines
| Name | |
|---|---|
| THREAD_ANNOTATION_ATTRIBUTE__(x) | |
| CAPABILITY(x) | |
| SCOPED_CAPABILITY | |
| GUARDED_BY(x) | |
| PT_GUARDED_BY(x) | |
| ACQUIRED_BEFORE(...) | |
| ACQUIRED_AFTER(...) | |
| REQUIRES(...) | |
| REQUIRES_SHARED(...) | |
| ACQUIRE(...) | |
| ACQUIRE_SHARED(...) | |
| RELEASE(...) | |
| RELEASE_SHARED(...) | |
| TRY_ACQUIRE(...) | |
| TRY_ACQUIRE_SHARED(...) | |
| EXCLUDES(...) | |
| ASSERT_CAPABILITY(x) | |
| ASSERT_SHARED_CAPABILITY(x) | |
| RETURN_CAPABILITY(x) | |
| NO_THREAD_SAFETY_ANALYSIS |
Macros Documentation
define THREAD_ANNOTATION_ATTRIBUTE__
#define THREAD_ANNOTATION_ATTRIBUTE__(
x
)
define CAPABILITY
#define CAPABILITY(
x
)
THREAD_ANNOTATION_ATTRIBUTE__(capability(x))
define SCOPED_CAPABILITY
#define SCOPED_CAPABILITY THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
define GUARDED_BY
#define GUARDED_BY(
x
)
THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
define PT_GUARDED_BY
#define PT_GUARDED_BY(
x
)
THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
define ACQUIRED_BEFORE
#define ACQUIRED_BEFORE(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))
define ACQUIRED_AFTER
#define ACQUIRED_AFTER(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))
define REQUIRES
#define REQUIRES(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__))
define REQUIRES_SHARED
#define REQUIRES_SHARED(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(__VA_ARGS__))
define ACQUIRE
#define ACQUIRE(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__))
define ACQUIRE_SHARED
#define ACQUIRE_SHARED(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(__VA_ARGS__))
define RELEASE
#define RELEASE(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__))
define RELEASE_SHARED
#define RELEASE_SHARED(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__))
define TRY_ACQUIRE
#define TRY_ACQUIRE(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__))
define TRY_ACQUIRE_SHARED
#define TRY_ACQUIRE_SHARED(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(__VA_ARGS__))
define EXCLUDES
#define EXCLUDES(
...
)
THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
define ASSERT_CAPABILITY
#define ASSERT_CAPABILITY(
x
)
THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x))
define ASSERT_SHARED_CAPABILITY
#define ASSERT_SHARED_CAPABILITY(
x
)
THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x))
define RETURN_CAPABILITY
#define RETURN_CAPABILITY(
x
)
THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
define NO_THREAD_SAFETY_ANALYSIS
#define NO_THREAD_SAFETY_ANALYSIS THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
Source code
#pragma once
// Clang thread safety analysis macros. Does nothing under non-clang compilers.
// Enable thread safety attributes only with clang and libc++ (the latter
// because we are using stl mutexes, which don't have the required annotations
// under stdlibc++). The attributes can be safely erased when compiling with
// other compilers.
#if defined(__clang__) && defined(_LIBCPP_VERSION) && !defined(SWIG)
#define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
#else
#define THREAD_ANNOTATION_ATTRIBUTE__(x) // no-op
#endif
#define CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(capability(x))
#define SCOPED_CAPABILITY THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
#define GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
#define PT_GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
#define ACQUIRED_BEFORE(...) THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))
#define ACQUIRED_AFTER(...) THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))
#define REQUIRES(...) THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__))
#define REQUIRES_SHARED(...) THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(__VA_ARGS__))
#define ACQUIRE(...) THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__))
#define ACQUIRE_SHARED(...) THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(__VA_ARGS__))
#define RELEASE(...) THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__))
#define RELEASE_SHARED(...) THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__))
#define TRY_ACQUIRE(...) THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__))
#define TRY_ACQUIRE_SHARED(...) \
THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(__VA_ARGS__))
#define EXCLUDES(...) THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
#define ASSERT_CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x))
#define ASSERT_SHARED_CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x))
#define RETURN_CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
#define NO_THREAD_SAFETY_ANALYSIS THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
Updated on 2026-01-10 at 22:49:45 +0000