// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Macros for static thread-safety analysis.
//
// These are from http://clang.llvm.org/docs/ThreadSafetyAnalysis.html (and thus
// really derive from google3's thread_annotations.h).
//
// TODO(vtl): We're still using the old-fashioned, deprecated annotations
// ("locks" instead of "capabilities"), since the new ones don't work yet (in
// particular, |TRY_ACQUIRE()| doesn't work: b/19264527).
// https://github.com/domokit/mojo/issues/314

#ifndef LIB_FXL_SYNCHRONIZATION_THREAD_ANNOTATIONS_H_
#define LIB_FXL_SYNCHRONIZATION_THREAD_ANNOTATIONS_H_

// Enable thread-safety attributes only with clang.
// The attributes can be safely erased when compiling with other compilers.
#if defined(__clang__)
#define FXL_THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
#else
#define FXL_THREAD_ANNOTATION_ATTRIBUTE__(x)
#endif

#define FXL_CAPABILITY(x) FXL_THREAD_ANNOTATION_ATTRIBUTE__(capability(x))

#define FXL_GUARDED_BY(x) FXL_THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))

#define FXL_PT_GUARDED_BY(x) FXL_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))

#define FXL_ACQUIRE(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__))

#define FXL_RELEASE(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__))

#define FXL_REQUIRE(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__))

#define FXL_ACQUIRED_AFTER(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))

#define FXL_ACQUIRED_BEFORE(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))

#define FXL_EXCLUSIVE_LOCKS_REQUIRED(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(__VA_ARGS__))

#define FXL_SHARED_LOCKS_REQUIRED(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(__VA_ARGS__))

#define FXL_LOCKS_EXCLUDED(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))

#define FXL_LOCK_RETURNED(x) FXL_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))

#define FXL_LOCKABLE FXL_THREAD_ANNOTATION_ATTRIBUTE__(lockable)

#define FXL_SCOPED_LOCKABLE FXL_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)

#define FXL_EXCLUSIVE_LOCK_FUNCTION(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(__VA_ARGS__))

#define FXL_SHARED_LOCK_FUNCTION(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(__VA_ARGS__))

#define FXL_ASSERT_EXCLUSIVE_LOCK(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(assert_exclusive_lock(__VA_ARGS__))

#define FXL_ASSERT_SHARED_LOCK(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_lock(__VA_ARGS__))

#define FXL_EXCLUSIVE_TRYLOCK_FUNCTION(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock_function(__VA_ARGS__))

#define FXL_SHARED_TRYLOCK_FUNCTION(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock_function(__VA_ARGS__))

#define FXL_UNLOCK_FUNCTION(...) \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(__VA_ARGS__))

#define FXL_NO_THREAD_SAFETY_ANALYSIS \
  FXL_THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)

// Use this in the header to annotate a function/method as not being
// thread-safe. This is equivalent to |FXL_NO_THREAD_SAFETY_ANALYSIS|, but
// semantically different: it declares that the caller must abide by additional
// restrictions. Limitation: Unfortunately, you can't apply this to a method in
// an interface (i.e., pure virtual method) and have it applied automatically to
// implementations.
#define FXL_NOT_THREAD_SAFE FXL_NO_THREAD_SAFETY_ANALYSIS

#endif  // LIB_FXL_SYNCHRONIZATION_THREAD_ANNOTATIONS_H_
