index: decrease ThreadSync cs_main contention

Only NextSyncBlock requires cs_main lock. The
other function calls like Commit or Rewind will
lock or not cs_main internally when they need it.

Avoiding keeping cs_main locked when Commit() or
Rewind() write data to disk.
This commit is contained in:
furszy 2023-02-16 17:25:00 -03:00
parent f1469eb454
commit 0faafb57f8
No known key found for this signature in database
GPG Key ID: 5DD23CCC686AA623

View File

@ -159,9 +159,7 @@ void BaseIndex::Sync()
return; return;
} }
{ const CBlockIndex* pindex_next = WITH_LOCK(cs_main, return NextSyncBlock(pindex, m_chainstate->m_chain));
LOCK(cs_main);
const CBlockIndex* pindex_next = NextSyncBlock(pindex, m_chainstate->m_chain);
if (!pindex_next) { if (!pindex_next) {
SetBestBlockIndex(pindex); SetBestBlockIndex(pindex);
m_synced = true; m_synced = true;
@ -170,12 +168,11 @@ void BaseIndex::Sync()
break; break;
} }
if (pindex_next->pprev != pindex && !Rewind(pindex, pindex_next->pprev)) { if (pindex_next->pprev != pindex && !Rewind(pindex, pindex_next->pprev)) {
FatalErrorf("%s: Failed to rewind index %s to a previous chain tip", FatalErrorf("%s: Failed to rewind index %s to a previous chain tip", __func__, GetName());
__func__, GetName());
return; return;
} }
pindex = pindex_next; pindex = pindex_next;
}
auto current_time{std::chrono::steady_clock::now()}; auto current_time{std::chrono::steady_clock::now()};
if (last_log_time + SYNC_LOG_INTERVAL < current_time) { if (last_log_time + SYNC_LOG_INTERVAL < current_time) {