Skip to content

Commit 3799d2d

Browse files
committed
Fix -rpcwait with -netinfo printing negative time durations
Fixes negative time duration values in the "send", "recv", and "age" columns (potentially the "txn" and "blk" columns also) for the first run of -rpcwait -netinfo after bitcoind startup. To reproduce, start bitcoind on mainnet and run `bitcoin-cli -rpcwait -netinfo <n>` where n is 1 or larger. The negative times will be larger/more apparent with a slower CPU speed or e.g. higher checkblocks/checklevel config option settings.
1 parent 1ab389b commit 3799d2d

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

src/bitcoin-cli.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,6 @@ class NetinfoRequestHandler : public BaseRequestHandler
439439
if (conn_type == "addr-fetch") return "addr";
440440
return "";
441441
}
442-
const int64_t m_time_now{count_seconds(Now<CliSeconds>())};
443442

444443
public:
445444
static constexpr int ID_PEERINFO = 0;
@@ -471,6 +470,7 @@ class NetinfoRequestHandler : public BaseRequestHandler
471470
if (networkinfo["version"].get_int() < 209900) {
472471
throw std::runtime_error("-netinfo requires bitcoind server to be running v0.21.0 and up");
473472
}
473+
const int64_t time_now{count_seconds(Now<CliSeconds>())};
474474

475475
// Count peer connection totals, and if DetailsRequested(), store peer data in a vector of structs.
476476
for (const UniValue& peer : batch[ID_PEERINFO]["result"].getValues()) {
@@ -501,7 +501,7 @@ class NetinfoRequestHandler : public BaseRequestHandler
501501
const double min_ping{peer["minping"].isNull() ? -1 : peer["minping"].get_real()};
502502
const double ping{peer["pingtime"].isNull() ? -1 : peer["pingtime"].get_real()};
503503
const std::string addr{peer["addr"].get_str()};
504-
const std::string age{conn_time == 0 ? "" : ToString((m_time_now - conn_time) / 60)};
504+
const std::string age{conn_time == 0 ? "" : ToString((time_now - conn_time) / 60)};
505505
const std::string sub_version{peer["subver"].get_str()};
506506
const bool is_addr_relay_enabled{peer["addr_relay_enabled"].isNull() ? false : peer["addr_relay_enabled"].get_bool()};
507507
const bool is_bip152_hb_from{peer["bip152_hb_from"].get_bool()};
@@ -537,10 +537,10 @@ class NetinfoRequestHandler : public BaseRequestHandler
537537
peer.network,
538538
PingTimeToString(peer.min_ping),
539539
PingTimeToString(peer.ping),
540-
peer.last_send ? ToString(m_time_now - peer.last_send) : "",
541-
peer.last_recv ? ToString(m_time_now - peer.last_recv) : "",
542-
peer.last_trxn ? ToString((m_time_now - peer.last_trxn) / 60) : peer.is_block_relay ? "*" : "",
543-
peer.last_blck ? ToString((m_time_now - peer.last_blck) / 60) : "",
540+
peer.last_send ? ToString(time_now - peer.last_send) : "",
541+
peer.last_recv ? ToString(time_now - peer.last_recv) : "",
542+
peer.last_trxn ? ToString((time_now - peer.last_trxn) / 60) : peer.is_block_relay ? "*" : "",
543+
peer.last_blck ? ToString((time_now - peer.last_blck) / 60) : "",
544544
strprintf("%s%s", peer.is_bip152_hb_to ? "." : " ", peer.is_bip152_hb_from ? "*" : " "),
545545
m_max_addr_processed_length, // variable spacing
546546
peer.addr_processed ? ToString(peer.addr_processed) : peer.is_addr_relay_enabled ? "" : ".",

0 commit comments

Comments
 (0)