Skip to content

Commit c8801bf

Browse files
TheCharlatanjosibake
authored andcommitted
kernel: Add check if the chainstate maanger is busy loading blocks
1 parent c0b48f2 commit c8801bf

File tree

4 files changed

+22
-0
lines changed

4 files changed

+22
-0
lines changed

src/kernel/bitcoinkernel.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -1667,3 +1667,8 @@ void kernel_transaction_destroy(kernel_Transaction* transaction)
16671667
delete cast_transaction_ref(transaction);
16681668
}
16691669
}
1670+
1671+
bool kernel_loading_blocks(kernel_ChainstateManager* chainman)
1672+
{
1673+
return cast_chainstate_manager(chainman)->m_blockman.LoadingBlocks();
1674+
}

src/kernel/bitcoinkernel.h

+11
Original file line numberDiff line numberDiff line change
@@ -1397,6 +1397,17 @@ kernel_Transaction* BITCOINKERNEL_WARN_UNUSED_RESULT kernel_transaction_create(
13971397
*/
13981398
void kernel_transaction_destroy(kernel_Transaction* transaction);
13991399

1400+
/**
1401+
* @brief Check if the chainstate manager is busy loading blocks from disk. This
1402+
* may be the case when reindexing, or importing block files from disk.
1403+
*
1404+
* @param[in] chainman Non-null.
1405+
* @return True if the chainstate manager is busy loading blocks.
1406+
*/
1407+
bool BITCOINKERNEL_WARN_UNUSED_RESULT kernel_loading_blocks(
1408+
kernel_ChainstateManager* chainman
1409+
) BITCOINKERNEL_ARG_NONNULL(1);
1410+
14001411
#ifdef __cplusplus
14011412
} // extern "C"
14021413
#endif // __cplusplus

src/kernel/bitcoinkernel_wrapper.h

+5
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,11 @@ class ChainMan
743743
return kernel_import_blocks(m_context.m_context.get(), m_chainman, c_paths.data(), c_paths.size());
744744
}
745745

746+
bool LoadingBlocks() const noexcept
747+
{
748+
return kernel_loading_blocks(m_chainman);
749+
}
750+
746751
bool ProcessBlockHeader(BlockHeader& header) const noexcept
747752
{
748753
return kernel_chainstate_manager_process_block_header(m_context.m_context.get(), m_chainman, header.m_block_header.get());

src/test/kernel/test_kernel.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,7 @@ void chainman_reindex_chainstate_test(TestDirectory& test_directory)
690690
std::vector<std::string> import_files;
691691
import_files.push_back(test_directory.m_directory / "blocks" / "blk00000.dat");
692692
chainman->ImportBlocks(import_files);
693+
assert(!chainman->LoadingBlocks());
693694
}
694695

695696
int main()

0 commit comments

Comments
 (0)