Cheaper/Faster bailout from TrySignChainTip when already signed before
This commit is contained in:
parent
0a5e8eb862
commit
96291e7a0f
@ -227,9 +227,6 @@ void CChainLocksHandler::TrySignChainTip()
|
|||||||
// This will fail when multiple blocks compete, but we accept this for the initial implementation.
|
// This will fail when multiple blocks compete, but we accept this for the initial implementation.
|
||||||
// Later, we'll add the multiple attempts process.
|
// Later, we'll add the multiple attempts process.
|
||||||
|
|
||||||
uint256 requestId = ::SerializeHash(std::make_pair(CLSIG_REQUESTID_PREFIX, pindex->nHeight));
|
|
||||||
uint256 msgHash = pindex->GetBlockHash();
|
|
||||||
|
|
||||||
{
|
{
|
||||||
LOCK(cs);
|
LOCK(cs);
|
||||||
|
|
||||||
@ -244,6 +241,16 @@ void CChainLocksHandler::TrySignChainTip()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pindex->nHeight == lastSignedHeight) {
|
||||||
|
// already signed this one
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bestChainLock.nHeight >= pindex->nHeight) {
|
||||||
|
// already got the same CLSIG or a better one
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (InternalHasConflictingChainLock(pindex->nHeight, pindex->GetBlockHash())) {
|
if (InternalHasConflictingChainLock(pindex->nHeight, pindex->GetBlockHash())) {
|
||||||
if (!inEnforceBestChainLock) {
|
if (!inEnforceBestChainLock) {
|
||||||
// we accepted this block when there was no lock yet, but now a conflicting lock appeared. Invalidate it.
|
// we accepted this block when there was no lock yet, but now a conflicting lock appeared. Invalidate it.
|
||||||
@ -253,14 +260,15 @@ void CChainLocksHandler::TrySignChainTip()
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bestChainLock.nHeight >= pindex->nHeight) {
|
|
||||||
// already got the same CLSIG or a better one
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pindex->nHeight == lastSignedHeight) {
|
uint256 requestId = ::SerializeHash(std::make_pair(CLSIG_REQUESTID_PREFIX, pindex->nHeight));
|
||||||
// already signed this one
|
uint256 msgHash = pindex->GetBlockHash();
|
||||||
|
|
||||||
|
{
|
||||||
|
LOCK(cs);
|
||||||
|
if (bestChainLock.nHeight >= pindex->nHeight) {
|
||||||
|
// might have happened while we didn't hold cs
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
lastSignedHeight = pindex->nHeight;
|
lastSignedHeight = pindex->nHeight;
|
||||||
|
Loading…
Reference in New Issue
Block a user