mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-03 09:56:38 -05:00
Merge bitcoin/bitcoin#22215: refactor: Add FoundBlock.found member
5c5d0b6264
Add FoundBlock.found member (Russell Yanofsky) Pull request description: This change lets IPC serialization code handle FoundBlock arguments more simply and efficiently. Without this change there was no way to determine from a FoundBlock object whether a block was found or not. So in order to correctly implement behavior of leaving FoundBlock output variables unmodified when a block was not found, IPC code would have to read preexisting output variable values from the local process, send them to the remote process, receive output values back from the remote process, and save them to output variables unconditionally. With FoundBlock.found method, the process is simpler. There's no need to read or send preexisting local output variable values, just to read final output values from the remote process and set them conditionally if the block was found. --- This PR is part of the [process separation project](https://github.com/bitcoin/bitcoin/projects/10). The commit was first part of larger PR #10102. ACKs for top commit: fjahr: Code review ACK5c5d0b6264
theStack: Concept and code review ACK5c5d0b6264
jamesob: ACK5c5d0b6264
([`jamesob/ackr/22215.1.ryanofsky.refactor_add_foundblock`](https://github.com/jamesob/bitcoin/tree/ackr/22215.1.ryanofsky.refactor_add_foundblock)) Zero-1729: crACK5c5d0b6
Tree-SHA512: d906e1b7100ff72c3aa06d80bd77673887b2db670ebd52dce7c4f6f557a23a1744c6109308228a37fda6c6ea74f05ba0efecff0ef235ab06ea8acd861fbb8675
This commit is contained in:
commit
62cb4009c2
2 changed files with 5 additions and 1 deletions
|
@ -35,7 +35,9 @@ namespace interfaces {
|
||||||
class Handler;
|
class Handler;
|
||||||
class Wallet;
|
class Wallet;
|
||||||
|
|
||||||
//! Helper for findBlock to selectively return pieces of block data.
|
//! Helper for findBlock to selectively return pieces of block data. If block is
|
||||||
|
//! found, data will be returned by setting specified output variables. If block
|
||||||
|
//! is not found, output variables will keep their previous values.
|
||||||
class FoundBlock
|
class FoundBlock
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -60,6 +62,7 @@ public:
|
||||||
bool* m_in_active_chain = nullptr;
|
bool* m_in_active_chain = nullptr;
|
||||||
const FoundBlock* m_next_block = nullptr;
|
const FoundBlock* m_next_block = nullptr;
|
||||||
CBlock* m_data = nullptr;
|
CBlock* m_data = nullptr;
|
||||||
|
mutable bool found = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Interface giving clients (wallet processes, maybe other analysis tools in
|
//! Interface giving clients (wallet processes, maybe other analysis tools in
|
||||||
|
|
|
@ -334,6 +334,7 @@ bool FillBlock(const CBlockIndex* index, const FoundBlock& block, UniqueLock<Rec
|
||||||
REVERSE_LOCK(lock);
|
REVERSE_LOCK(lock);
|
||||||
if (!ReadBlockFromDisk(*block.m_data, index, Params().GetConsensus())) block.m_data->SetNull();
|
if (!ReadBlockFromDisk(*block.m_data, index, Params().GetConsensus())) block.m_data->SetNull();
|
||||||
}
|
}
|
||||||
|
block.found = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue