Block ActivateBestChain to empty validationinterface queue

This commit is contained in:
Matt Corallo
2017-12-04 18:57:55 -05:00
parent 5a933cefcc
commit 36137497f1
2 changed files with 16 additions and 3 deletions

View File

@ -40,6 +40,7 @@
#include <validationinterface.h>
#include <warnings.h>
#include <future>
#include <sstream>
#include <boost/algorithm/string/replace.hpp>
@ -2566,6 +2567,18 @@ bool CChainState::ActivateBestChain(CValidationState &state, const CChainParams&
int nStopAtHeight = gArgs.GetArg("-stopatheight", DEFAULT_STOPATHEIGHT);
do {
boost::this_thread::interruption_point();
if (GetMainSignals().CallbacksPending() > 10) {
// Block until the validation queue drains. This should largely
// never happen in normal operation, however may happen during
// reindex, causing memory blowup if we run too far ahead.
std::promise<void> promise;
CallFunctionInValidationInterfaceQueue([&promise] {
promise.set_value();
});
promise.get_future().wait();
}
if (ShutdownRequested())
break;