Skip to content

Commit e058544

Browse files
committed
Make m_tip_block an std::optional
This change avoids ambiguity when no tip is connected and it is compared to uint256::ZERO.
1 parent b042c4f commit e058544

File tree

4 files changed

+7
-4
lines changed

4 files changed

+7
-4
lines changed

src/init.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1807,7 +1807,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
18071807
{
18081808
WAIT_LOCK(kernel_notifications.m_tip_block_mutex, lock);
18091809
kernel_notifications.m_tip_block_cv.wait(lock, [&]() EXCLUSIVE_LOCKS_REQUIRED(kernel_notifications.m_tip_block_mutex) {
1810-
return !kernel_notifications.m_tip_block.IsNull() || ShutdownRequested(node);
1810+
return kernel_notifications.m_tip_block || ShutdownRequested(node);
18111811
});
18121812
}
18131813

src/node/interfaces.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -973,7 +973,9 @@ class MinerImpl : public Mining
973973
{
974974
WAIT_LOCK(notifications().m_tip_block_mutex, lock);
975975
notifications().m_tip_block_cv.wait_for(lock, timeout, [&]() EXCLUSIVE_LOCKS_REQUIRED(notifications().m_tip_block_mutex) {
976-
return (notifications().m_tip_block != current_tip && notifications().m_tip_block != uint256::ZERO) || chainman().m_interrupt;
976+
// We need to wait for m_tip_block to be set AND for the value
977+
// to differ from the current_tip value.
978+
return (notifications().m_tip_block && notifications().m_tip_block != current_tip) || chainman().m_interrupt;
977979
});
978980
}
979981
// Must release m_tip_block_mutex before locking cs_main, to avoid deadlocks.

src/node/kernel_notifications.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class KernelNotifications : public kernel::Notifications
5959
//! The block for which the last blockTip notification was received.
6060
//! It's first set when the tip is connected during node initialization.
6161
//! Might be unset during an early shutdown.
62-
uint256 m_tip_block GUARDED_BY(m_tip_block_mutex){uint256::ZERO};
62+
std::optional<uint256> m_tip_block GUARDED_BY(m_tip_block_mutex);
6363

6464
private:
6565
const std::function<bool()>& m_shutdown_request;

src/test/validation_chainstate_tests.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ BOOST_FIXTURE_TEST_CASE(chainstate_update_tip, TestChain100Setup)
7272
ChainstateManager& chainman = *Assert(m_node.chainman);
7373
const auto get_notify_tip{[&]() {
7474
LOCK(m_node.notifications->m_tip_block_mutex);
75-
return m_node.notifications->m_tip_block;
75+
BOOST_REQUIRE(m_node.notifications->m_tip_block);
76+
return *m_node.notifications->m_tip_block;
7677
}};
7778
uint256 curr_tip = get_notify_tip();
7879

0 commit comments

Comments
 (0)