Handle negative timeout for waitTipChanged()

This commit is contained in:
Sjors Provoost committed 2025-03-13 12:12:17 +01:00
1 parent c20a5ce106
commit f9cf8bd0ab
2 files changed
+4 -1

No files matched your search

+2 -1
View File
@@ -93,7 +93,8 @@ public:
* *
* @param[in] current_tip block hash of the current chain tip. Function waits * @param[in] current_tip block hash of the current chain tip. Function waits
* for the chain tip to differ from this. * for the chain tip to differ from this.
* @param[in] timeout how long to wait for a new tip * @param[in] timeout how long to wait for a new tip (default is forever)
*
* @returns Hash and height of the current chain tip after this call. * @returns Hash and height of the current chain tip after this call.
*/ */
virtual BlockRef waitTipChanged(uint256 current_tip, MillisecondsDouble timeout = MillisecondsDouble::max()) = 0; virtual BlockRef waitTipChanged(uint256 current_tip, MillisecondsDouble timeout = MillisecondsDouble::max()) = 0;
+2
View File
@@ -1072,6 +1072,8 @@ public:
BlockRef waitTipChanged(uint256 current_tip, MillisecondsDouble timeout) override BlockRef waitTipChanged(uint256 current_tip, MillisecondsDouble timeout) override
{ {
Assume(timeout >= 0ms); // No internal callers should use a negative timeout
if (timeout < 0ms) timeout = 0ms;
if (timeout > std::chrono::years{100}) timeout = std::chrono::years{100}; // Upper bound to avoid UB in std::chrono if (timeout > std::chrono::years{100}) timeout = std::chrono::years{100}; // Upper bound to avoid UB in std::chrono
{ {
WAIT_LOCK(notifications().m_tip_block_mutex, lock); WAIT_LOCK(notifications().m_tip_block_mutex, lock);