Line | Count | Source |
1 | | // Copyright (c) 2009-2010 Satoshi Nakamoto |
2 | | // Copyright (c) 2009-present The Bitcoin Core developers |
3 | | // Distributed under the MIT software license, see the accompanying |
4 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
5 | | |
6 | | #ifndef BITCOIN_SYNC_H |
7 | | #define BITCOIN_SYNC_H |
8 | | |
9 | | // This header declares threading primitives compatible with Clang |
10 | | // Thread Safety Analysis and provides appropriate annotation macros. |
11 | | #include <threadsafety.h> // IWYU pragma: export |
12 | | #include <util/macros.h> |
13 | | |
14 | | #include <cassert> |
15 | | #include <condition_variable> |
16 | | #include <mutex> |
17 | | #include <string> |
18 | | #include <thread> |
19 | | |
20 | | //////////////////////////////////////////////// |
21 | | // // |
22 | | // THE SIMPLE DEFINITION, EXCLUDING DEBUG CODE // |
23 | | // // |
24 | | //////////////////////////////////////////////// |
25 | | |
26 | | /* |
27 | | RecursiveMutex mutex; |
28 | | std::recursive_mutex mutex; |
29 | | |
30 | | LOCK(mutex); |
31 | | std::unique_lock<std::recursive_mutex> criticalblock(mutex); |
32 | | |
33 | | LOCK2(mutex1, mutex2); |
34 | | std::unique_lock<std::recursive_mutex> criticalblock1(mutex1); |
35 | | std::unique_lock<std::recursive_mutex> criticalblock2(mutex2); |
36 | | |
37 | | TRY_LOCK(mutex, name); |
38 | | std::unique_lock<std::recursive_mutex> name(mutex, std::try_to_lock_t); |
39 | | */ |
40 | | |
41 | | /////////////////////////////// |
42 | | // // |
43 | | // THE ACTUAL IMPLEMENTATION // |
44 | | // // |
45 | | /////////////////////////////// |
46 | | |
47 | | #ifdef DEBUG_LOCKORDER |
48 | | template <typename MutexType> |
49 | | void EnterCritical(const char* pszName, const char* pszFile, int nLine, MutexType* cs, bool fTry = false); |
50 | | void LeaveCritical(); |
51 | | void CheckLastCritical(void* cs, std::string& lockname, const char* guardname, const char* file, int line); |
52 | | template <typename MutexType> |
53 | | void AssertLockHeldInternal(const char* pszName, const char* pszFile, int nLine, MutexType* cs) EXCLUSIVE_LOCKS_REQUIRED(cs); |
54 | | template <typename MutexType> |
55 | | void AssertLockNotHeldInternal(const char* pszName, const char* pszFile, int nLine, MutexType* cs) LOCKS_EXCLUDED(cs); |
56 | | void DeleteLock(void* cs); |
57 | | bool LockStackEmpty(); |
58 | | |
59 | | /** |
60 | | * Call abort() if a potential lock order deadlock bug is detected, instead of |
61 | | * just logging information and throwing a logic_error. Defaults to true, and |
62 | | * set to false in DEBUG_LOCKORDER unit tests. |
63 | | */ |
64 | | extern bool g_debug_lockorder_abort; |
65 | | #else |
66 | | template <typename MutexType> |
67 | 19.3k | inline void EnterCritical(const char* pszName, const char* pszFile, int nLine, MutexType* cs, bool fTry = false) {}_Z13EnterCriticalISt15recursive_mutexEvPKcS2_iPT_b Line | Count | Source | 67 | 7.73k | inline void EnterCritical(const char* pszName, const char* pszFile, int nLine, MutexType* cs, bool fTry = false) {} |
_Z13EnterCriticalISt5mutexEvPKcS2_iPT_b Line | Count | Source | 67 | 11.6k | inline void EnterCritical(const char* pszName, const char* pszFile, int nLine, MutexType* cs, bool fTry = false) {} |
|
68 | 19.3k | inline void LeaveCritical() {} |
69 | 0 | inline void CheckLastCritical(void* cs, std::string& lockname, const char* guardname, const char* file, int line) {} |
70 | | template <typename MutexType> |
71 | 10.3k | inline void AssertLockHeldInternal(const char* pszName, const char* pszFile, int nLine, MutexType* cs) EXCLUSIVE_LOCKS_REQUIRED(cs) {}_Z22AssertLockHeldInternalI14AnnotatedMixinISt15recursive_mutexEEvPKcS4_iPT_ Line | Count | Source | 71 | 10.3k | inline void AssertLockHeldInternal(const char* pszName, const char* pszFile, int nLine, MutexType* cs) EXCLUSIVE_LOCKS_REQUIRED(cs) {} |
_Z22AssertLockHeldInternalI14AnnotatedMixinISt5mutexEEvPKcS4_iPT_ Line | Count | Source | 71 | 1 | inline void AssertLockHeldInternal(const char* pszName, const char* pszFile, int nLine, MutexType* cs) EXCLUSIVE_LOCKS_REQUIRED(cs) {} |
|
72 | | template <typename MutexType> |
73 | 4 | void AssertLockNotHeldInternal(const char* pszName, const char* pszFile, int nLine, MutexType* cs) LOCKS_EXCLUDED(cs) {}_Z25AssertLockNotHeldInternalI14AnnotatedMixinISt5mutexEEvPKcS4_iPT_ Line | Count | Source | 73 | 4 | void AssertLockNotHeldInternal(const char* pszName, const char* pszFile, int nLine, MutexType* cs) LOCKS_EXCLUDED(cs) {} |
Unexecuted instantiation: _Z25AssertLockNotHeldInternalI14AnnotatedMixinISt15recursive_mutexEEvPKcS4_iPT_ Unexecuted instantiation: _Z25AssertLockNotHeldInternalI11GlobalMutexEvPKcS2_iPT_ |
74 | 31 | inline void DeleteLock(void* cs) {} |
75 | 0 | inline bool LockStackEmpty() { return true; } |
76 | | #endif |
77 | | |
78 | | /* |
79 | | * Called when a mutex fails to lock immediately because it is held by another |
80 | | * thread, or spuriously. Responsible for locking the lock before returning. |
81 | | */ |
82 | | #ifdef DEBUG_LOCKCONTENTION |
83 | | |
84 | | template <typename LockType> |
85 | | void ContendedLock(std::string_view name, std::string_view file, int nLine, LockType& lock); |
86 | | #endif |
87 | | |
88 | | /** |
89 | | * Template mixin that adds -Wthread-safety locking annotations and lock order |
90 | | * checking to a subset of the mutex API. |
91 | | */ |
92 | | template <typename PARENT> |
93 | | class LOCKABLE AnnotatedMixin : public PARENT |
94 | | { |
95 | | public: |
96 | 31 | ~AnnotatedMixin() { |
97 | 31 | DeleteLock((void*)this); |
98 | 31 | } _ZN14AnnotatedMixinISt5mutexED2Ev Line | Count | Source | 96 | 30 | ~AnnotatedMixin() { | 97 | 30 | DeleteLock((void*)this); | 98 | 30 | } |
_ZN14AnnotatedMixinISt15recursive_mutexED2Ev Line | Count | Source | 96 | 1 | ~AnnotatedMixin() { | 97 | 1 | DeleteLock((void*)this); | 98 | 1 | } |
|
99 | | |
100 | | void lock() EXCLUSIVE_LOCK_FUNCTION() |
101 | | { |
102 | | PARENT::lock(); |
103 | | } |
104 | | |
105 | | void unlock() UNLOCK_FUNCTION() |
106 | | { |
107 | | PARENT::unlock(); |
108 | | } |
109 | | |
110 | | bool try_lock() EXCLUSIVE_TRYLOCK_FUNCTION(true) |
111 | | { |
112 | | return PARENT::try_lock(); |
113 | | } |
114 | | |
115 | | using unique_lock = std::unique_lock<PARENT>; |
116 | | #ifdef __clang__ |
117 | | //! For negative capabilities in the Clang Thread Safety Analysis. |
118 | | //! A negative requirement uses the EXCLUSIVE_LOCKS_REQUIRED attribute, in conjunction |
119 | | //! with the ! operator, to indicate that a mutex should not be held. |
120 | | const AnnotatedMixin& operator!() const { return *this; } |
121 | | #endif // __clang__ |
122 | | }; |
123 | | |
124 | | /** |
125 | | * Wrapped mutex: supports recursive locking, but no waiting |
126 | | * TODO: We should move away from using the recursive lock by default. |
127 | | */ |
128 | | using RecursiveMutex = AnnotatedMixin<std::recursive_mutex>; |
129 | | |
130 | | /** Wrapped mutex: supports waiting but not recursive locking */ |
131 | | using Mutex = AnnotatedMixin<std::mutex>; |
132 | | |
133 | | /** Different type to mark Mutex at global scope |
134 | | * |
135 | | * Thread safety analysis can't handle negative assertions about mutexes |
136 | | * with global scope well, so mark them with a separate type, and |
137 | | * eventually move all the mutexes into classes so they are not globally |
138 | | * visible. |
139 | | * |
140 | | * See: https://github.com/bitcoin/bitcoin/pull/20272#issuecomment-720755781 |
141 | | */ |
142 | | class GlobalMutex : public Mutex { }; |
143 | | |
144 | 10.3k | #define AssertLockHeld(cs) AssertLockHeldInternal(#cs, __FILE__, __LINE__, &cs) |
145 | | |
146 | 4 | inline void AssertLockNotHeldInline(const char* name, const char* file, int line, Mutex* cs) EXCLUSIVE_LOCKS_REQUIRED(!cs) { AssertLockNotHeldInternal(name, file, line, cs); } |
147 | 0 | inline void AssertLockNotHeldInline(const char* name, const char* file, int line, RecursiveMutex* cs) LOCKS_EXCLUDED(cs) { AssertLockNotHeldInternal(name, file, line, cs); } |
148 | 0 | inline void AssertLockNotHeldInline(const char* name, const char* file, int line, GlobalMutex* cs) LOCKS_EXCLUDED(cs) { AssertLockNotHeldInternal(name, file, line, cs); } |
149 | 4 | #define AssertLockNotHeld(cs) AssertLockNotHeldInline(#cs, __FILE__, __LINE__, &cs) |
150 | | |
151 | | /** Wrapper around std::unique_lock style lock for MutexType. */ |
152 | | template <typename MutexType> |
153 | | class SCOPED_LOCKABLE UniqueLock : public MutexType::unique_lock |
154 | | { |
155 | | private: |
156 | | using Base = typename MutexType::unique_lock; |
157 | | |
158 | | void Enter(const char* pszName, const char* pszFile, int nLine) |
159 | 19.3k | { |
160 | 19.3k | EnterCritical(pszName, pszFile, nLine, Base::mutex()); |
161 | | #ifdef DEBUG_LOCKCONTENTION |
162 | | if (!Base::try_lock()) { |
163 | | ContendedLock(pszName, pszFile, nLine, static_cast<Base&>(*this)); |
164 | | } |
165 | | #else |
166 | 19.3k | Base::lock(); |
167 | 19.3k | #endif |
168 | 19.3k | } _ZN10UniqueLockI14AnnotatedMixinISt15recursive_mutexEE5EnterEPKcS5_i Line | Count | Source | 159 | 7.73k | { | 160 | 7.73k | EnterCritical(pszName, pszFile, nLine, Base::mutex()); | 161 | | #ifdef DEBUG_LOCKCONTENTION | 162 | | if (!Base::try_lock()) { | 163 | | ContendedLock(pszName, pszFile, nLine, static_cast<Base&>(*this)); | 164 | | } | 165 | | #else | 166 | 7.73k | Base::lock(); | 167 | 7.73k | #endif | 168 | 7.73k | } |
_ZN10UniqueLockI14AnnotatedMixinISt5mutexEE5EnterEPKcS5_i Line | Count | Source | 159 | 11.6k | { | 160 | 11.6k | EnterCritical(pszName, pszFile, nLine, Base::mutex()); | 161 | | #ifdef DEBUG_LOCKCONTENTION | 162 | | if (!Base::try_lock()) { | 163 | | ContendedLock(pszName, pszFile, nLine, static_cast<Base&>(*this)); | 164 | | } | 165 | | #else | 166 | 11.6k | Base::lock(); | 167 | 11.6k | #endif | 168 | 11.6k | } |
Unexecuted instantiation: _ZN10UniqueLockI11GlobalMutexE5EnterEPKcS3_i |
169 | | |
170 | | bool TryEnter(const char* pszName, const char* pszFile, int nLine) |
171 | 0 | { |
172 | 0 | EnterCritical(pszName, pszFile, nLine, Base::mutex(), true); |
173 | 0 | if (Base::try_lock()) { Branch (173:13): [True: 0, False: 0]
Branch (173:13): [True: 0, False: 0]
Branch (173:13): [True: 0, False: 0]
|
174 | 0 | return true; |
175 | 0 | } |
176 | 0 | LeaveCritical(); |
177 | 0 | return false; |
178 | 0 | } Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt15recursive_mutexEE8TryEnterEPKcS5_i Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt5mutexEE8TryEnterEPKcS5_i Unexecuted instantiation: _ZN10UniqueLockI11GlobalMutexE8TryEnterEPKcS3_i |
179 | | |
180 | | public: |
181 | 19.3k | UniqueLock(MutexType& mutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) EXCLUSIVE_LOCK_FUNCTION(mutexIn) : Base(mutexIn, std::defer_lock) |
182 | 19.3k | { |
183 | 19.3k | if (fTry) Branch (183:13): [True: 0, False: 11.6k]
Branch (183:13): [True: 0, False: 7.73k]
Branch (183:13): [True: 0, False: 0]
|
184 | 0 | TryEnter(pszName, pszFile, nLine); |
185 | 19.3k | else |
186 | 19.3k | Enter(pszName, pszFile, nLine); |
187 | 19.3k | } _ZN10UniqueLockI14AnnotatedMixinISt5mutexEEC2ERS2_PKcS6_ib Line | Count | Source | 181 | 11.6k | UniqueLock(MutexType& mutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) EXCLUSIVE_LOCK_FUNCTION(mutexIn) : Base(mutexIn, std::defer_lock) | 182 | 11.6k | { | 183 | 11.6k | if (fTry) Branch (183:13): [True: 0, False: 11.6k]
| 184 | 0 | TryEnter(pszName, pszFile, nLine); | 185 | 11.6k | else | 186 | 11.6k | Enter(pszName, pszFile, nLine); | 187 | 11.6k | } |
_ZN10UniqueLockI14AnnotatedMixinISt15recursive_mutexEEC2ERS2_PKcS6_ib Line | Count | Source | 181 | 7.73k | UniqueLock(MutexType& mutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) EXCLUSIVE_LOCK_FUNCTION(mutexIn) : Base(mutexIn, std::defer_lock) | 182 | 7.73k | { | 183 | 7.73k | if (fTry) Branch (183:13): [True: 0, False: 7.73k]
| 184 | 0 | TryEnter(pszName, pszFile, nLine); | 185 | 7.73k | else | 186 | 7.73k | Enter(pszName, pszFile, nLine); | 187 | 7.73k | } |
Unexecuted instantiation: _ZN10UniqueLockI11GlobalMutexEC2ERS0_PKcS4_ib |
188 | | |
189 | | UniqueLock(MutexType* pmutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) EXCLUSIVE_LOCK_FUNCTION(pmutexIn) |
190 | 0 | { |
191 | 0 | if (!pmutexIn) return; Branch (191:13): [True: 0, False: 0]
|
192 | | |
193 | 0 | *static_cast<Base*>(this) = Base(*pmutexIn, std::defer_lock); |
194 | 0 | if (fTry) Branch (194:13): [True: 0, False: 0]
|
195 | 0 | TryEnter(pszName, pszFile, nLine); |
196 | 0 | else |
197 | 0 | Enter(pszName, pszFile, nLine); |
198 | 0 | } |
199 | | |
200 | | ~UniqueLock() UNLOCK_FUNCTION() |
201 | 19.3k | { |
202 | 19.3k | if (Base::owns_lock()) Branch (202:13): [True: 11.6k, False: 0]
Branch (202:13): [True: 7.73k, False: 0]
Branch (202:13): [True: 0, False: 0]
|
203 | 19.3k | LeaveCritical(); |
204 | 19.3k | } _ZN10UniqueLockI14AnnotatedMixinISt5mutexEED2Ev Line | Count | Source | 201 | 11.6k | { | 202 | 11.6k | if (Base::owns_lock()) Branch (202:13): [True: 11.6k, False: 0]
| 203 | 11.6k | LeaveCritical(); | 204 | 11.6k | } |
_ZN10UniqueLockI14AnnotatedMixinISt15recursive_mutexEED2Ev Line | Count | Source | 201 | 7.73k | { | 202 | 7.73k | if (Base::owns_lock()) Branch (202:13): [True: 7.73k, False: 0]
| 203 | 7.73k | LeaveCritical(); | 204 | 7.73k | } |
Unexecuted instantiation: _ZN10UniqueLockI11GlobalMutexED2Ev |
205 | | |
206 | | operator bool() |
207 | 0 | { |
208 | 0 | return Base::owns_lock(); |
209 | 0 | } Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt15recursive_mutexEEcvbEv Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt5mutexEEcvbEv |
210 | | |
211 | | protected: |
212 | | // needed for reverse_lock |
213 | 0 | UniqueLock() = default; Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt5mutexEEC2Ev Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt15recursive_mutexEEC2Ev |
214 | | |
215 | | public: |
216 | | /** |
217 | | * An RAII-style reverse lock. Unlocks on construction and locks on destruction. |
218 | | */ |
219 | | class SCOPED_LOCKABLE reverse_lock { |
220 | | public: |
221 | 0 | explicit reverse_lock(UniqueLock& _lock, const MutexType& mutex, const char* _guardname, const char* _file, int _line) UNLOCK_FUNCTION(mutex) : lock(_lock), file(_file), line(_line) { |
222 | | // Ensure that mutex passed back for thread-safety analysis is indeed the original |
223 | 0 | assert(std::addressof(mutex) == lock.mutex()); Branch (223:13): [True: 0, False: 0]
Branch (223:13): [True: 0, False: 0]
|
224 | | |
225 | 0 | CheckLastCritical((void*)lock.mutex(), lockname, _guardname, _file, _line); |
226 | 0 | lock.unlock(); |
227 | 0 | LeaveCritical(); |
228 | 0 | lock.swap(templock); |
229 | 0 | } Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt5mutexEE12reverse_lockC2ERS3_RKS2_PKcS9_i Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt15recursive_mutexEE12reverse_lockC2ERS3_RKS2_PKcS9_i |
230 | | |
231 | 0 | ~reverse_lock() UNLOCK_FUNCTION() { |
232 | 0 | templock.swap(lock); |
233 | 0 | EnterCritical(lockname.c_str(), file.c_str(), line, lock.mutex()); |
234 | 0 | lock.lock(); |
235 | 0 | } Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt5mutexEE12reverse_lockD2Ev Unexecuted instantiation: _ZN10UniqueLockI14AnnotatedMixinISt15recursive_mutexEE12reverse_lockD2Ev |
236 | | |
237 | | private: |
238 | | reverse_lock(reverse_lock const&); |
239 | | reverse_lock& operator=(reverse_lock const&); |
240 | | |
241 | | UniqueLock& lock; |
242 | | UniqueLock templock; |
243 | | std::string lockname; |
244 | | const std::string file; |
245 | | const int line; |
246 | | }; |
247 | | friend class reverse_lock; |
248 | | }; |
249 | | |
250 | | // clang's thread-safety analyzer is unable to deal with aliases of mutexes, so |
251 | | // it is not possible to use the lock's copy of the mutex for that purpose. |
252 | | // Instead, the original mutex needs to be passed back to the reverse_lock for |
253 | | // the sake of thread-safety analysis, but it is not actually used otherwise. |
254 | 18.4E | #define REVERSE_LOCK(g, cs) typename std::decay<decltype(g)>::type::reverse_lock BITCOIN_UNIQUE_NAME(revlock)(g, cs, #cs, __FILE__, __LINE__) |
255 | | |
256 | | // When locking a Mutex, require negative capability to ensure the lock |
257 | | // is not already held |
258 | 11.6k | inline Mutex& MaybeCheckNotHeld(Mutex& cs) EXCLUSIVE_LOCKS_REQUIRED(!cs) LOCK_RETURNED(cs) { return cs; } |
259 | 0 | inline Mutex* MaybeCheckNotHeld(Mutex* cs) EXCLUSIVE_LOCKS_REQUIRED(!cs) LOCK_RETURNED(cs) { return cs; } |
260 | | |
261 | | // When locking a GlobalMutex or RecursiveMutex, just check it is not |
262 | | // locked in the surrounding scope. |
263 | | template <typename MutexType> |
264 | 7.73k | inline MutexType& MaybeCheckNotHeld(MutexType& m) LOCKS_EXCLUDED(m) LOCK_RETURNED(m) { return m; }_Z17MaybeCheckNotHeldI14AnnotatedMixinISt15recursive_mutexEERT_S4_ Line | Count | Source | 264 | 7.73k | inline MutexType& MaybeCheckNotHeld(MutexType& m) LOCKS_EXCLUDED(m) LOCK_RETURNED(m) { return m; } |
Unexecuted instantiation: _Z17MaybeCheckNotHeldI11GlobalMutexERT_S2_ |
265 | | template <typename MutexType> |
266 | 0 | inline MutexType* MaybeCheckNotHeld(MutexType* m) LOCKS_EXCLUDED(m) LOCK_RETURNED(m) { return m; } |
267 | | |
268 | 19.3k | #define LOCK(cs) UniqueLock BITCOIN_UNIQUE_NAME(criticalblock)(MaybeCheckNotHeld(cs), #cs, __FILE__, __LINE__) |
269 | | #define LOCK2(cs1, cs2) \ |
270 | 0 | UniqueLock criticalblock1(MaybeCheckNotHeld(cs1), #cs1, __FILE__, __LINE__); \ |
271 | 0 | UniqueLock criticalblock2(MaybeCheckNotHeld(cs2), #cs2, __FILE__, __LINE__) |
272 | 0 | #define LOCK_ARGS(cs) MaybeCheckNotHeld(cs), #cs, __FILE__, __LINE__ |
273 | 0 | #define TRY_LOCK(cs, name) UniqueLock name(LOCK_ARGS(cs), true) |
274 | 0 | #define WAIT_LOCK(cs, name) UniqueLock name(LOCK_ARGS(cs)) |
275 | | |
276 | | //! Run code while locking a mutex. |
277 | | //! |
278 | | //! Examples: |
279 | | //! |
280 | | //! WITH_LOCK(cs, shared_val = shared_val + 1); |
281 | | //! |
282 | | //! int val = WITH_LOCK(cs, return shared_val); |
283 | | //! |
284 | | //! Note: |
285 | | //! |
286 | | //! Since the return type deduction follows that of decltype(auto), while the |
287 | | //! deduced type of: |
288 | | //! |
289 | | //! WITH_LOCK(cs, int i = 1; return i); |
290 | | //! |
291 | | //! is int, the deduced type of: |
292 | | //! |
293 | | //! WITH_LOCK(cs, int j = 1; return (j)); |
294 | | //! |
295 | | //! is &int, a reference to a local variable |
296 | | //! |
297 | | //! The above is detectable at compile-time with the -Wreturn-local-addr flag in |
298 | | //! gcc and the -Wreturn-stack-address flag in clang, both enabled by default. |
299 | 4 | #define WITH_LOCK(cs, code) (MaybeCheckNotHeld(cs), [&]() -> decltype(auto) { LOCK(cs); code; }())Unexecuted instantiation: _ZZN20AddrManDeterministicC1ERK15NetGroupManagerR18FuzzedDataProvideriENKUlvE_clEv Unexecuted instantiation: block_index.cpp:_ZZ23block_index_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_1clEv Unexecuted instantiation: chain.cpp:_ZZ17chain_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_0clEv Unexecuted instantiation: checkqueue.cpp:_ZZN11CCheckQueueIN12_GLOBAL__N_19DumbCheckEiED1EvENKUlvE_clEv Unexecuted instantiation: cmpctblock.cpp:_ZZ22cmpctblock_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_0clEv Unexecuted instantiation: cmpctblock.cpp:_ZZ22cmpctblock_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_1clEv Unexecuted instantiation: cmpctblock.cpp:_ZZ22cmpctblock_fuzz_targetSt4spanIKhLm18446744073709551615EEENK4$_11clEv Unexecuted instantiation: cmpctblock.cpp:_ZZ22cmpctblock_fuzz_targetSt4spanIKhLm18446744073709551615EEENK4$_12clEv Unexecuted instantiation: cmpctblock.cpp:_ZZZ22cmpctblock_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_3clEvENKUlvE_clEv Unexecuted instantiation: cmpctblock.cpp:_ZZZ22cmpctblock_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_2clEvENKUlvE_clEv Unexecuted instantiation: cmpctblock.cpp:_ZZZ22cmpctblock_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_3clEvENKUlvE0_clEv Unexecuted instantiation: cmpctblock.cpp:_ZZZ22cmpctblock_fuzz_targetSt4spanIKhLm18446744073709551615EEENK4$_10clEvENKUlvE_clEv Unexecuted instantiation: _ZZN10ThreadPool12WorkersCountEvENKUlvE_clEv Unexecuted instantiation: coins_view.cpp:_ZZZ13TestCoinsViewR18FuzzedDataProviderR15CCoinsViewCacheP10CCoinsViewENK3$_3clEvENKUlvE_clEv Unexecuted instantiation: p2p_headers_presync.cpp:_ZZ31p2p_headers_presync_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_0clEv Unexecuted instantiation: p2p_headers_presync.cpp:_ZZ31p2p_headers_presync_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_1clEv Unexecuted instantiation: _ZZNK11V1Transport23ReceivedMessageCompleteEvENKUlvE_clEv Unexecuted instantiation: package_eval.cpp:_ZZN12_GLOBAL__N_134ephemeral_package_eval_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_1clEv Unexecuted instantiation: package_eval.cpp:_ZZN12_GLOBAL__N_134ephemeral_package_eval_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_2clEv Unexecuted instantiation: package_eval.cpp:_ZZN12_GLOBAL__N_134ephemeral_package_eval_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_3clEv Unexecuted instantiation: package_eval.cpp:_ZZN12_GLOBAL__N_118initialize_tx_poolEvENK3$_0clEv Unexecuted instantiation: package_eval.cpp:_ZZN12_GLOBAL__N_127tx_package_eval_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_1clEv Unexecuted instantiation: package_eval.cpp:_ZZN12_GLOBAL__N_127tx_package_eval_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_2clEv Unexecuted instantiation: package_eval.cpp:_ZZN12_GLOBAL__N_127tx_package_eval_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_3clEv Unexecuted instantiation: process_message.cpp:_ZZ27process_message_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_0clEv Unexecuted instantiation: process_message.cpp:_ZZ27process_message_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_1clEv Unexecuted instantiation: process_messages.cpp:_ZZ28process_messages_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_0clEv Unexecuted instantiation: process_messages.cpp:_ZZ28process_messages_fuzz_targetSt4spanIKhLm18446744073709551615EEENK3$_1clEv Unexecuted instantiation: _ZZN10ThreadPool13WorkQueueSizeEvENKUlvE_clEv Unexecuted instantiation: tx_pool.cpp:_ZZN12_GLOBAL__N_128tx_pool_standard_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_1clEv Unexecuted instantiation: tx_pool.cpp:_ZZN12_GLOBAL__N_128tx_pool_standard_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_3clEv Unexecuted instantiation: tx_pool.cpp:_ZZN12_GLOBAL__N_128tx_pool_standard_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_5clEv Unexecuted instantiation: tx_pool.cpp:_ZZN12_GLOBAL__N_128tx_pool_standard_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_6clEv Unexecuted instantiation: tx_pool.cpp:_ZZN12_GLOBAL__N_16FinishER18FuzzedDataProviderRNS_12MockedTxPoolER10ChainstateENK3$_0clEv Unexecuted instantiation: tx_pool.cpp:_ZZN12_GLOBAL__N_16FinishER18FuzzedDataProviderRNS_12MockedTxPoolER10ChainstateENK3$_1clEv Unexecuted instantiation: tx_pool.cpp:_ZZN12_GLOBAL__N_16FinishER18FuzzedDataProviderRNS_12MockedTxPoolER10ChainstateENK3$_2clEv Unexecuted instantiation: tx_pool.cpp:_ZZN12_GLOBAL__N_118initialize_tx_poolEvENK3$_0clEv Unexecuted instantiation: tx_pool.cpp:_ZZN12_GLOBAL__N_119tx_pool_fuzz_targetESt4spanIKhLm18446744073709551615EEENK3$_0clEv Unexecuted instantiation: utxo_snapshot.cpp:_ZZN12_GLOBAL__N_118utxo_snapshot_fuzzILb0EEEvSt4spanIKhLm18446744073709551615EEENKUlvE0_clEv Unexecuted instantiation: utxo_snapshot.cpp:_ZZN12_GLOBAL__N_116initialize_chainILb1EEEvvENKUlvE_clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet12RemoveWalletERNS_13WalletContextERKSt10shared_ptrINS_7CWalletEESt8optionalIbERSt6vectorI13bilingual_strSaISA_EEENK3$_0clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet10LoadWalletERNS_13WalletContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt8optionalIbERKNS_15DatabaseOptionsERNS_14DatabaseStatusER13bilingual_strRSt6vectorISH_SaISH_EEENK3$_0clB5cxx11Ev Unexecuted instantiation: wallet.cpp:_ZZN6wallet10LoadWalletERNS_13WalletContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt8optionalIbERKNS_15DatabaseOptionsERNS_14DatabaseStatusER13bilingual_strRSt6vectorISH_SaISH_EEENK3$_1clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet12CreateWalletERNS_13WalletContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt8optionalIbERNS_15DatabaseOptionsERNS_14DatabaseStatusER13bilingual_strRSt6vectorISG_SaISG_EEENK3$_0clEv Unexecuted instantiation: wallet.cpp:_ZZNK6wallet7CWallet30BlockUntilSyncedToCurrentChainEvENK3$_0clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet7CWallet14RescanFromTimeElRKNS_20WalletRescanReserverEENK3$_0clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet7CWallet25ScanForWalletTransactionsERK7uint256iSt8optionalIiERKNS_20WalletRescanReserverEbENK3$_0clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet7CWallet25ScanForWalletTransactionsERK7uint256iSt8optionalIiERKNS_20WalletRescanReserverEbENK3$_1clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet7CWallet25ScanForWalletTransactionsERK7uint256iSt8optionalIiERKNS_20WalletRescanReserverEbENK3$_2clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet7CWallet25ScanForWalletTransactionsERK7uint256iSt8optionalIiERKNS_20WalletRescanReserverEbENK3$_3clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet7CWallet12LoadExistingERNS_13WalletContextERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10unique_ptrINS_14WalletDatabaseESt14default_deleteISC_EER13bilingual_strRSt6vectorISG_SaISG_EEENK3$_0clEv Unexecuted instantiation: wallet.cpp:_ZZN6wallet7CWallet15postInitProcessEvENK3$_0clEv Unexecuted instantiation: wallet.cpp:_ZZNK6wallet7CWallet12BackupWalletERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEENK3$_0clEv Unexecuted instantiation: export.cpp:_ZZN6wallet21ExportWatchOnlyWalletB5cxx11ERKNS_7CWalletERKN2fs4pathERNS_13WalletContextEENK3$_2clEv Unexecuted instantiation: mining.cpp:_ZZ12ProcessBlockRKN4node11NodeContextERKSt10shared_ptrI6CBlockEENK3$_0clEv _ZZN10CScheduler4stopEvENKUlvE_clEv Line | Count | Source | 299 | 1 | #define WITH_LOCK(cs, code) (MaybeCheckNotHeld(cs), [&]() -> decltype(auto) { LOCK(cs); code; }()) |
Unexecuted instantiation: httpserver.cpp:_ZZNK12http_bitcoin10HTTPServer22SocketHandlerConnectedERKNS0_11IOReadinessEENK3$_0clEv Unexecuted instantiation: httpserver.cpp:_ZZNK12http_bitcoin10HTTPServer19GenerateWaitSocketsEvENK3$_0clEv Unexecuted instantiation: httpserver.cpp:_ZZNK12http_bitcoin10HTTPServer19GenerateWaitSocketsEvENK3$_1clEv Unexecuted instantiation: _ZZN12http_bitcoin10HTTPServer17SetRequestHandlerESt8functionIFvOSt10unique_ptrINS_11HTTPRequestESt14default_deleteIS3_EEEEENKUlvE_clEv Unexecuted instantiation: _ZZN10ThreadPool9InterruptEvENKUlvE_clEv Unexecuted instantiation: init.cpp:_ZZ9InterruptRN4node11NodeContextEENK3$_0clEv Unexecuted instantiation: init.cpp:_ZZ11AppInitMainRN4node11NodeContextEPN10interfaces21BlockAndHeaderTipInfoEENK3$_7clEv Unexecuted instantiation: init.cpp:_ZZ11AppInitMainRN4node11NodeContextEPN10interfaces21BlockAndHeaderTipInfoEENK3$_8clEv Unexecuted instantiation: init.cpp:_ZZ24StartIndexBackgroundSyncRN4node11NodeContextEENK3$_0clEv Unexecuted instantiation: init.cpp:_ZZ24StartIndexBackgroundSyncRN4node11NodeContextEENK3$_1clEv Unexecuted instantiation: init.cpp:_ZZZ11AppInitMainRN4node11NodeContextEPN10interfaces21BlockAndHeaderTipInfoEENK4$_10clEvENKUlvE_clEv Unexecuted instantiation: init.cpp:_ZZZ11AppInitMainRN4node11NodeContextEPN10interfaces21BlockAndHeaderTipInfoEENK4$_10clEvENKUlvE0_clEv Unexecuted instantiation: net.cpp:_ZZN8CConnman13AddConnectionERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE14ConnectionTypebENK3$_0clEv Unexecuted instantiation: net.cpp:_ZZN8CConnman22SocketHandlerConnectedERKSt6vectorIP5CNodeSaIS2_EERKSt13unordered_mapISt10shared_ptrIK4SockENS9_6EventsENS9_17HashSharedPtrSockENS9_18EqualSharedPtrSockESaISt4pairIKSB_SC_EEEENK3$_0clEv net.cpp:_ZZN8CConnman9StopNodesEvENK3$_0clEv Line | Count | Source | 299 | 1 | #define WITH_LOCK(cs, code) (MaybeCheckNotHeld(cs), [&]() -> decltype(auto) { LOCK(cs); code; }()) |
net.cpp:_ZZN8CConnman9StopNodesEvENK3$_1clEv Line | Count | Source | 299 | 1 | #define WITH_LOCK(cs, code) (MaybeCheckNotHeld(cs), [&]() -> decltype(auto) { LOCK(cs); code; }()) |
Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_14Peer10GetTxRelayEvENKUlvE_clEv Unexecuted instantiation: net_processing.cpp:_ZZNK12_GLOBAL__N_115PeerManagerImpl17GetNodeStateStatsElR15CNodeStateStatsENK3$_0clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl14InitializeNodeERK5CNode12ServiceFlagsENK3$_0clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl12FinalizeNodeERK5CNodeENK3$_0clEv Unexecuted instantiation: net_processing.cpp:_ZZZN12_GLOBAL__N_115PeerManagerImpl16FindTxForGetDataERKNS_4Peer7TxRelayERK7GenTxidENK3$_0clI22transaction_identifierILb0EEEEDaRKT_ENKUlvE_clEv Unexecuted instantiation: net_processing.cpp:_ZZZN12_GLOBAL__N_115PeerManagerImpl16FindTxForGetDataERKNS_4Peer7TxRelayERK7GenTxidENK3$_0clI22transaction_identifierILb1EEEEDaRKT_ENKUlvE_clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl19ProcessGetBlockDataER5CNodeRNS_4PeerERK4CInvENK3$_0clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl19ProcessGetBlockDataER5CNodeRNS_4PeerERK4CInvENK3$_1clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl14ProcessMessageERNS_4PeerER5CNodeRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEER10DataStreamNSt6chrono10time_pointI9NodeClockNSF_8durationIlSt5ratioILl1ELl1000000000EEEEEERKSt6atomicIbEENK3$_0clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl14ProcessMessageERNS_4PeerER5CNodeRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEER10DataStreamNSt6chrono10time_pointI9NodeClockNSF_8durationIlSt5ratioILl1ELl1000000000EEEEEERKSt6atomicIbEENK3$_3clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl14ProcessMessageERNS_4PeerER5CNodeRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEER10DataStreamNSt6chrono10time_pointI9NodeClockNSF_8durationIlSt5ratioILl1ELl1000000000EEEEEERKSt6atomicIbEENK3$_4clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl14ProcessMessageERNS_4PeerER5CNodeRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEER10DataStreamNSt6chrono10time_pointI9NodeClockNSF_8durationIlSt5ratioILl1ELl1000000000EEEEEERKSt6atomicIbEENK3$_5clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl14ProcessMessageERNS_4PeerER5CNodeRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEER10DataStreamNSt6chrono10time_pointI9NodeClockNSF_8durationIlSt5ratioILl1ELl1000000000EEEEEERKSt6atomicIbEENK3$_6clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl21ProcessHeadersMessageER5CNodeRNS_4PeerEOSt6vectorI12CBlockHeaderSaIS6_EEbENK3$_0clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl25HandleUnconnectingHeadersER5CNodeRNS_4PeerERKSt6vectorI12CBlockHeaderSaIS6_EEENK3$_0clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl25HandleUnconnectingHeadersER5CNodeRNS_4PeerERKSt6vectorI12CBlockHeaderSaIS6_EEENK3$_1clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl14ProcessMessageERNS_4PeerER5CNodeRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEER10DataStreamNSt6chrono10time_pointI9NodeClockNSF_8durationIlSt5ratioILl1ELl1000000000EEEEEERKSt6atomicIbEENK3$_7clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl14ProcessMessageERNS_4PeerER5CNodeRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEER10DataStreamNSt6chrono10time_pointI9NodeClockNSF_8durationIlSt5ratioILl1ELl1000000000EEEEEERKSt6atomicIbEENK3$_8clEv Unexecuted instantiation: net_processing.cpp:_ZZN12_GLOBAL__N_115PeerManagerImpl12SendMessagesER5CNodeENK3$_0clEv Unexecuted instantiation: blockstorage.cpp:_ZZNK4node12BlockManager13ReadBlockUndoER10CBlockUndoRK11CBlockIndexENK3$_0clEv Unexecuted instantiation: blockstorage.cpp:_ZZNK4node12BlockManager9ReadBlockER6CBlockRK11CBlockIndexENK3$_0clEv Unexecuted instantiation: blockstorage.cpp:_ZZN4node12ImportBlocksER17ChainstateManagerSt4spanIKN2fs4pathELm18446744073709551615EEENK3$_0clEv Unexecuted instantiation: interfaces.cpp:_ZZN4node12_GLOBAL__N_18NodeImpl16getBestBlockHashEvENKUlvE_clEv Unexecuted instantiation: interfaces.cpp:_ZZN4node12_GLOBAL__N_19ChainImpl9getHeightEvENKUlvE_clEv Unexecuted instantiation: interfaces.cpp:_ZZN4node12_GLOBAL__N_19ChainImpl21blockFilterMatchesAnyE15BlockFilterTypeRK7uint256RKSt13unordered_setISt6vectorIhSaIhEE14ByteVectorHashSt8equal_toIS9_ESaIS9_EEENKUlvE_clEv Unexecuted instantiation: interfaces.cpp:_ZZN4node12_GLOBAL__N_19ChainImpl32waitForNotificationsIfTipChangedERK7uint256ENKUlvE_clEv Unexecuted instantiation: interfaces.cpp:_ZZN4node12_GLOBAL__N_19MinerImpl14createNewBlockERKNS_18BlockCreateOptionsEbENKUlvE_clEv Unexecuted instantiation: miner.cpp:_ZZN4node21RegenerateCommitmentsER6CBlockR17ChainstateManagerENK3$_0clEv Unexecuted instantiation: warnings.cpp:_ZZN4node8Warnings3SetESt7variantIJN6kernel7WarningENS_7WarningEEE13bilingual_strENK3$_0clEv Unexecuted instantiation: warnings.cpp:_ZZN4node8Warnings5UnsetESt7variantIJN6kernel7WarningENS_7WarningEEEENK3$_0clEv Unexecuted instantiation: block_policy_estimator.cpp:_ZZN16FeeFilterRounder5roundElENK3$_0clEv Unexecuted instantiation: rest.cpp:_ZZL19rest_deploymentinfoRKSt3anyPN12http_bitcoin11HTTPRequestERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEENK3$_0clEv Unexecuted instantiation: rest.cpp:_ZZL17rest_spent_txoutsRKSt3anyPN12http_bitcoin11HTTPRequestERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEENK3$_0clEv Unexecuted instantiation: blockchain.cpp:_ZZ11blockToJSONRN4node12BlockManagerERK6CBlockRK11CBlockIndexS7_11TxVerbosity7uint256ENK3$_0clEv Unexecuted instantiation: blockchain.cpp:_ZZ11blockToJSONRN4node12BlockManagerERK6CBlockRK11CBlockIndexS7_11TxVerbosity7uint256ENK3$_1clEv Unexecuted instantiation: blockchain.cpp:_ZZ28CreateRolledBackUTXOSnapshotRN4node11NodeContextER10ChainstatePK11CBlockIndexO8AutoFileRKN2fs4pathESC_bENK3$_0clEv Unexecuted instantiation: blockchain.cpp:_ZZ18CreateUTXOSnapshotRN4node11NodeContextER10ChainstateO8AutoFileRKN2fs4pathES9_ENK3$_0clEv Unexecuted instantiation: blockchain.cpp:_ZZZL16getblockfrompeervENK3$_0clERK9RPCMethodRK14JSONRPCRequestENKUlvE_clEv Unexecuted instantiation: blockchain.cpp:_ZZZL16getblockfrompeervENK3$_0clERK9RPCMethodRK14JSONRPCRequestENKUlvE0_clEv Unexecuted instantiation: blockchain.cpp:_ZZZL16getblockfrompeervENK3$_0clERK9RPCMethodRK14JSONRPCRequestENKUlvE1_clEv Unexecuted instantiation: blockchain.cpp:_ZZZL15gettxoutsetinfovENK3$_0clERK9RPCMethodRK14JSONRPCRequestENKUlvE_clEv Unexecuted instantiation: blockchain.cpp:_ZZZL10scanblocksvENK3$_0clERK9RPCMethodRK14JSONRPCRequestENKUlvE_clEv Unexecuted instantiation: blockchain.cpp:_ZZZL12dumptxoutsetvENK3$_0clERK9RPCMethodRK14JSONRPCRequestENKUlvE_clEv Unexecuted instantiation: mempool.cpp:_ZZZL13submitpackagevENK3$_0clERK9RPCMethodRK14JSONRPCRequestENKUlvE_clEv Unexecuted instantiation: rawtransaction.cpp:_ZZZL17getrawtransactionvENK3$_0clERK9RPCMethodRK14JSONRPCRequestENKUlvE_clEv Unexecuted instantiation: rawtransaction.cpp:_ZZZL17getrawtransactionvENK3$_0clERK9RPCMethodRK14JSONRPCRequestENKUlvE0_clEv Unexecuted instantiation: validation.cpp:_ZZN10Chainstate17ActivateBestChainER20BlockValidationStateSt10shared_ptrIK6CBlockEENK3$_0clEv Unexecuted instantiation: validation.cpp:_ZZN10Chainstate15InvalidateBlockER20BlockValidationStateP11CBlockIndexENK3$_0clEv Unexecuted instantiation: validation.cpp:_ZZN17ChainstateManager15ProcessNewBlockERKSt10shared_ptrIK6CBlockEbbPbENK3$_0clEv Unexecuted instantiation: validation.cpp:_ZZN17ChainstateManager21LoadExternalBlockFileER8AutoFileP11FlatFilePosPSt8multimapI7uint256S2_St4lessIS5_ESaISt4pairIKS5_S2_EEEENK3$_0clEv Unexecuted instantiation: validation.cpp:_ZZN17ChainstateManager16ActivateSnapshotER8AutoFileRKN4node16SnapshotMetadataEbENK3$_1clEv Unexecuted instantiation: validation.cpp:_ZZN17ChainstateManager27PopulateAndValidateSnapshotER10ChainstateR8AutoFileRKN4node16SnapshotMetadataEENK3$_1clEv Unexecuted instantiation: validation.cpp:_ZZN17ChainstateManager27PopulateAndValidateSnapshotER10ChainstateR8AutoFileRKN4node16SnapshotMetadataEENK3$_2clEv Unexecuted instantiation: validation.cpp:_ZZN17ChainstateManager27PopulateAndValidateSnapshotER10ChainstateR8AutoFileRKN4node16SnapshotMetadataEENK3$_3clEv Unexecuted instantiation: validation.cpp:_ZZN17ChainstateManager27PopulateAndValidateSnapshotER10ChainstateR8AutoFileRKN4node16SnapshotMetadataEENK3$_4clEv Unexecuted instantiation: validation.cpp:_ZZN17ChainstateManager27PopulateAndValidateSnapshotER10ChainstateR8AutoFileRKN4node16SnapshotMetadataEENK3$_5clEv _ZZN11CCheckQueueI12CScriptCheckSt4pairI13ScriptError_tNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEED1EvENKUlvE_clEv Line | Count | Source | 299 | 1 | #define WITH_LOCK(cs, code) (MaybeCheckNotHeld(cs), [&]() -> decltype(auto) { LOCK(cs); code; }()) |
Unexecuted instantiation: base.cpp:_ZZN9BaseIndex4InitEvENK3$_0clEv Unexecuted instantiation: base.cpp:_ZZN9BaseIndex4SyncEvENK3$_0clEv Unexecuted instantiation: base.cpp:_ZZN9BaseIndex6CommitEvENK3$_0clEv Unexecuted instantiation: base.cpp:_ZZN9BaseIndex17SetBestBlockIndexEPK11CBlockIndexENK3$_0clEv Branch (299:89): [True: 0, False: 0]
|
300 | | |
301 | | #endif // BITCOIN_SYNC_H |