diff options
author | MarcoFalke <falke.marco@gmail.com> | 2020-04-08 20:43:22 +0800 |
---|---|---|
committer | MarcoFalke <falke.marco@gmail.com> | 2020-04-08 20:43:37 +0800 |
commit | 1f70185a809362117a8158e386fdead85728794f (patch) | |
tree | fe4e86b7ebe0b2aa3f24c9f5250e827e55b736fe /src/validationinterface.cpp | |
parent | 1b151e3ffce7c1a2ee46bf280cc1d96775d1f91e (diff) | |
parent | 2276339a176f83ffe8ceefb3e41ecca8601aa13b (diff) |
Merge #18551: Do not clear validationinterface entries being executed
2276339a176f83ffe8ceefb3e41ecca8601aa13b Add test for UnregisterAllValidationInterfaces bug (Russell Yanofsky)
3c61abbbc847d725f30d169278d84655571407c1 Do not clear validationinterface entries being executed (Pieter Wuille)
Pull request description:
The previous code for MainSignalsInstance::Clear would decrement the reference
count of every interface, including ones that were already Unregister()ed but
still being executed.
This fixes the issue pointed out here: https://github.com/bitcoin/bitcoin/pull/18524/files#r404395685 . It's not currently observable.
ACKs for top commit:
jonasschnelli:
utACK 2276339a176f83ffe8ceefb3e41ecca8601aa13b - reviewed code and test (thanks @ryanofsky for adding the test).
MarcoFalke:
ACK 2276339a176f83ffe8ceefb3e41ecca8601aa13b 🎎
ryanofsky:
Code review ACK 2276339a176f83ffe8ceefb3e41ecca8601aa13b. No change to bugfix, just rebased and new test commit added since last review
Tree-SHA512: c1d68e7c681a45c6cadc84e407c2266bcb4b12d34264e1232a61c4eadb74b551231c5a3b1d041de39f507aef4dfa7d4589b8bfe1833f069c739c6270d2a05dbe
Diffstat (limited to 'src/validationinterface.cpp')
-rw-r--r-- | src/validationinterface.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp index c06647cb0d..11000774c0 100644 --- a/src/validationinterface.cpp +++ b/src/validationinterface.cpp @@ -67,8 +67,8 @@ public: void Clear() { LOCK(m_mutex); - for (auto it = m_list.begin(); it != m_list.end();) { - it = --it->count ? std::next(it) : m_list.erase(it); + for (const auto& entry : m_map) { + if (!--entry.second->count) m_list.erase(entry.second); } m_map.clear(); } |