// Copyright 2026 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UTIL_THREAD_ANNOTATIONS_H_ #define UTIL_THREAD_ANNOTATIONS_H_ #if defined(__clang__) && !defined(SWIG) #define OSP_THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x)) #else #define OSP_THREAD_ANNOTATION_ATTRIBUTE__(x) #endif #define OSP_GUARDED_BY(x) \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x)) #define OSP_PT_GUARDED_BY(x) \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x)) #define OSP_EXCLUSIVE_LOCKS_REQUIRED(...) \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(__VA_ARGS__)) #define OSP_SHARED_LOCKS_REQUIRED(...) \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(__VA_ARGS__)) #define OSP_EXCLUSIVE_LOCK_FUNCTION(...) \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(__VA_ARGS__)) #define OSP_SHARED_LOCK_FUNCTION(...) \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(__VA_ARGS__)) #define OSP_UNLOCK_FUNCTION(...) \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(__VA_ARGS__)) #define OSP_LOCKS_EXCLUDED(...) \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__)) #define OSP_LOCK_RETURNED(x) \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x)) #define OSP_LOCKABLE \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(lockable) #define OSP_SCOPED_LOCKABLE \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable) #define OSP_NO_THREAD_SAFETY_ANALYSIS \ OSP_THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis) #endif // UTIL_THREAD_ANNOTATIONS_H_