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