Inside Bitcoin
Opening the selected file…
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) 2009-2010 Satoshi Nakamoto2// Copyright (c) 2009-present The Bitcoin Core developers3// Distributed under the MIT software license, see the accompanying4// file COPYING or http://www.opensource.org/licenses/mit-license.php.6#ifndef BITCOIN_THREADSAFETY_H7#define BITCOIN_THREADSAFETY_H9#ifdef __clang__10// TL;DR Add GUARDED_BY(mutex) to member variables. The others are11// rarely necessary. Ex: int nFoo GUARDED_BY(cs_foo);12//13// See https://clang.llvm.org/docs/ThreadSafetyAnalysis.html14// for documentation. The clang compiler can do advanced static analysis15// of locking when given the -Wthread-safety option.16#define LOCKABLE __attribute__((capability("")))17#define SCOPED_LOCKABLE __attribute__((scoped_lockable))18#define GUARDED_BY(x) __attribute__((guarded_by(x)))19#define PT_GUARDED_BY(x) __attribute__((pt_guarded_by(x)))20#define ACQUIRED_AFTER(...) __attribute__((acquired_after(__VA_ARGS__)))21#define ACQUIRED_BEFORE(...) __attribute__((acquired_before(__VA_ARGS__)))22#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__((acquire_capability(__VA_ARGS__)))23#define SHARED_LOCK_FUNCTION(...) __attribute__((acquire_shared_capability(__VA_ARGS__)))24#define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__((try_acquire_capability(__VA_ARGS__)))25#define SHARED_TRYLOCK_FUNCTION(...) __attribute__((try_acquire_shared_capability(__VA_ARGS__)))26#define UNLOCK_FUNCTION(...) __attribute__((release_capability(__VA_ARGS__)))27#define SHARED_UNLOCK_FUNCTION(...) __attribute__((release_shared_capability(__VA_ARGS__)))28#define LOCK_RETURNED(x) __attribute__((lock_returned(x)))29#define LOCKS_EXCLUDED(...) __attribute__((locks_excluded(__VA_ARGS__)))30#define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__((requires_capability(__VA_ARGS__)))31#define SHARED_LOCKS_REQUIRED(...) __attribute__((requires_shared_capability(__VA_ARGS__)))32#define NO_THREAD_SAFETY_ANALYSIS __attribute__((no_thread_safety_analysis))33#define ASSERT_EXCLUSIVE_LOCK(...) __attribute__((assert_capability(__VA_ARGS__)))34#else35#define LOCKABLE36#define SCOPED_LOCKABLE37#define GUARDED_BY(x)38#define PT_GUARDED_BY(x)39#define ACQUIRED_AFTER(...)40#define ACQUIRED_BEFORE(...)41#define EXCLUSIVE_LOCK_FUNCTION(...)42#define SHARED_LOCK_FUNCTION(...)43#define EXCLUSIVE_TRYLOCK_FUNCTION(...)44#define SHARED_TRYLOCK_FUNCTION(...)45#define UNLOCK_FUNCTION(...)46#define SHARED_UNLOCK_FUNCTION(...)47#define LOCK_RETURNED(x)48#define LOCKS_EXCLUDED(...)49#define EXCLUSIVE_LOCKS_REQUIRED(...)50#define SHARED_LOCKS_REQUIRED(...)51#define NO_THREAD_SAFETY_ANALYSIS52#define ASSERT_EXCLUSIVE_LOCK(...)53#endif // __GNUC__55#endif // BITCOIN_THREADSAFETY_H