Call RewindBlockIndex without cs_main held
This commit is contained in:
parent
436f7d735f
commit
880ce7d46b
1 changed files with 19 additions and 12 deletions
13
src/init.cpp
13
src/init.cpp
|
@ -1474,11 +1474,11 @@ bool AppInitMain(InitInterfaces& interfaces)
|
||||||
|
|
||||||
uiInterface.InitMessage(_("Loading block index..."));
|
uiInterface.InitMessage(_("Loading block index..."));
|
||||||
|
|
||||||
LOCK(cs_main);
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
const int64_t load_block_index_start_time = GetTimeMillis();
|
const int64_t load_block_index_start_time = GetTimeMillis();
|
||||||
|
bool is_coinsview_empty;
|
||||||
try {
|
try {
|
||||||
|
LOCK(cs_main);
|
||||||
UnloadBlockIndex();
|
UnloadBlockIndex();
|
||||||
pcoinsTip.reset();
|
pcoinsTip.reset();
|
||||||
pcoinsdbview.reset();
|
pcoinsdbview.reset();
|
||||||
|
@ -1550,7 +1550,7 @@ bool AppInitMain(InitInterfaces& interfaces)
|
||||||
// The on-disk coinsdb is now in a good state, create the cache
|
// The on-disk coinsdb is now in a good state, create the cache
|
||||||
pcoinsTip.reset(new CCoinsViewCache(pcoinscatcher.get()));
|
pcoinsTip.reset(new CCoinsViewCache(pcoinscatcher.get()));
|
||||||
|
|
||||||
bool is_coinsview_empty = fReset || fReindexChainState || pcoinsTip->GetBestBlock().IsNull();
|
is_coinsview_empty = fReset || fReindexChainState || pcoinsTip->GetBestBlock().IsNull();
|
||||||
if (!is_coinsview_empty) {
|
if (!is_coinsview_empty) {
|
||||||
// LoadChainTip sets chainActive based on pcoinsTip's best block
|
// LoadChainTip sets chainActive based on pcoinsTip's best block
|
||||||
if (!LoadChainTip(chainparams)) {
|
if (!LoadChainTip(chainparams)) {
|
||||||
|
@ -1559,6 +1559,11 @@ bool AppInitMain(InitInterfaces& interfaces)
|
||||||
}
|
}
|
||||||
assert(chainActive.Tip() != nullptr);
|
assert(chainActive.Tip() != nullptr);
|
||||||
}
|
}
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
LogPrintf("%s\n", e.what());
|
||||||
|
strLoadError = _("Error opening block database");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (!fReset) {
|
if (!fReset) {
|
||||||
// Note that RewindBlockIndex MUST run even if we're about to -reindex-chainstate.
|
// Note that RewindBlockIndex MUST run even if we're about to -reindex-chainstate.
|
||||||
|
@ -1571,6 +1576,8 @@ bool AppInitMain(InitInterfaces& interfaces)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
LOCK(cs_main);
|
||||||
if (!is_coinsview_empty) {
|
if (!is_coinsview_empty) {
|
||||||
uiInterface.InitMessage(_("Verifying blocks..."));
|
uiInterface.InitMessage(_("Verifying blocks..."));
|
||||||
if (fHavePruned && gArgs.GetArg("-checkblocks", DEFAULT_CHECKBLOCKS) > MIN_BLOCKS_TO_KEEP) {
|
if (fHavePruned && gArgs.GetArg("-checkblocks", DEFAULT_CHECKBLOCKS) > MIN_BLOCKS_TO_KEEP) {
|
||||||
|
|
Loading…
Reference in a new issue