mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
Merge #9606: net: Consistently use GetTimeMicros() for inactivity checks
99464bc
net: Consistently use GetTimeMicros() for inactivity checks (Suhas Daftuar)
This commit is contained in:
commit
3f9f9629cc
@ -391,7 +391,7 @@ CNode* CConnman::ConnectNode(CAddress addrConnect, const char *pszDest, bool fCo
|
||||
uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize();
|
||||
CNode* pnode = new CNode(id, nLocalServices, GetBestHeight(), hSocket, addrConnect, CalculateKeyedNetGroup(addrConnect), nonce, pszDest ? pszDest : "", false);
|
||||
pnode->nServicesExpected = ServiceFlags(addrConnect.nServices & nRelevantServices);
|
||||
pnode->nTimeConnected = GetTime();
|
||||
pnode->nTimeConnected = GetSystemTimeInSeconds();
|
||||
pnode->AddRef();
|
||||
GetNodeSignals().InitializeNode(pnode, *this);
|
||||
{
|
||||
@ -771,7 +771,7 @@ size_t CConnman::SocketSendData(CNode *pnode)
|
||||
assert(data.size() > pnode->nSendOffset);
|
||||
int nBytes = send(pnode->hSocket, reinterpret_cast<const char*>(data.data()) + pnode->nSendOffset, data.size() - pnode->nSendOffset, MSG_NOSIGNAL | MSG_DONTWAIT);
|
||||
if (nBytes > 0) {
|
||||
pnode->nLastSend = GetTime();
|
||||
pnode->nLastSend = GetSystemTimeInSeconds();
|
||||
pnode->nSendBytes += nBytes;
|
||||
pnode->nSendOffset += nBytes;
|
||||
nSentSize += nBytes;
|
||||
@ -1280,7 +1280,7 @@ void CConnman::ThreadSocketHandler()
|
||||
//
|
||||
// Inactivity checking
|
||||
//
|
||||
int64_t nTime = GetTime();
|
||||
int64_t nTime = GetSystemTimeInSeconds();
|
||||
if (nTime - pnode->nTimeConnected > 60)
|
||||
{
|
||||
if (pnode->nLastRecv == 0 || pnode->nLastSend == 0)
|
||||
@ -2565,7 +2565,7 @@ CNode::CNode(NodeId idIn, ServiceFlags nLocalServicesIn, int nMyStartingHeightIn
|
||||
nLastRecv = 0;
|
||||
nSendBytes = 0;
|
||||
nRecvBytes = 0;
|
||||
nTimeConnected = GetTime();
|
||||
nTimeConnected = GetSystemTimeInSeconds();
|
||||
nTimeOffset = 0;
|
||||
addrName = addrNameIn == "" ? addr.ToStringIPPort() : addrNameIn;
|
||||
nVersion = 0;
|
||||
|
@ -1023,11 +1023,11 @@ void RPCConsole::updateNodeDetail(const CNodeCombinedStats *stats)
|
||||
peerAddrDetails += "<br />" + tr("via %1").arg(QString::fromStdString(stats->nodeStats.addrLocal));
|
||||
ui->peerHeading->setText(peerAddrDetails);
|
||||
ui->peerServices->setText(GUIUtil::formatServicesStr(stats->nodeStats.nServices));
|
||||
ui->peerLastSend->setText(stats->nodeStats.nLastSend ? GUIUtil::formatDurationStr(GetTime() - stats->nodeStats.nLastSend) : tr("never"));
|
||||
ui->peerLastRecv->setText(stats->nodeStats.nLastRecv ? GUIUtil::formatDurationStr(GetTime() - stats->nodeStats.nLastRecv) : tr("never"));
|
||||
ui->peerLastSend->setText(stats->nodeStats.nLastSend ? GUIUtil::formatDurationStr(GetSystemTimeInSeconds() - stats->nodeStats.nLastSend) : tr("never"));
|
||||
ui->peerLastRecv->setText(stats->nodeStats.nLastRecv ? GUIUtil::formatDurationStr(GetSystemTimeInSeconds() - stats->nodeStats.nLastRecv) : tr("never"));
|
||||
ui->peerBytesSent->setText(FormatBytes(stats->nodeStats.nSendBytes));
|
||||
ui->peerBytesRecv->setText(FormatBytes(stats->nodeStats.nRecvBytes));
|
||||
ui->peerConnTime->setText(GUIUtil::formatDurationStr(GetTime() - stats->nodeStats.nTimeConnected));
|
||||
ui->peerConnTime->setText(GUIUtil::formatDurationStr(GetSystemTimeInSeconds() - stats->nodeStats.nTimeConnected));
|
||||
ui->peerPingTime->setText(GUIUtil::formatPingTime(stats->nodeStats.dPingTime));
|
||||
ui->peerPingWait->setText(GUIUtil::formatPingTime(stats->nodeStats.dPingWait));
|
||||
ui->peerMinPing->setText(GUIUtil::formatPingTime(stats->nodeStats.dMinPing));
|
||||
|
@ -431,22 +431,16 @@ UniValue setmocktime(const JSONRPCRequest& request)
|
||||
if (!Params().MineBlocksOnDemand())
|
||||
throw runtime_error("setmocktime for regression testing (-regtest mode) only");
|
||||
|
||||
// cs_vNodes is locked and node send/receive times are updated
|
||||
// atomically with the time change to prevent peers from being
|
||||
// disconnected because we think we haven't communicated with them
|
||||
// in a long time.
|
||||
// For now, don't change mocktime if we're in the middle of validation, as
|
||||
// this could have an effect on mempool time-based eviction, as well as
|
||||
// IsCurrentForFeeEstimation() and IsInitialBlockDownload().
|
||||
// TODO: figure out the right way to synchronize around mocktime, and
|
||||
// ensure all callsites of GetTime() are accessing this safely.
|
||||
LOCK(cs_main);
|
||||
|
||||
RPCTypeCheck(request.params, boost::assign::list_of(UniValue::VNUM));
|
||||
SetMockTime(request.params[0].get_int64());
|
||||
|
||||
uint64_t t = GetTime();
|
||||
if(g_connman) {
|
||||
g_connman->ForEachNode([t](CNode* pnode) {
|
||||
pnode->nLastSend = pnode->nLastRecv = t;
|
||||
});
|
||||
}
|
||||
|
||||
return NullUniValue;
|
||||
}
|
||||
|
||||
|
@ -46,6 +46,11 @@ int64_t GetTimeMicros()
|
||||
return now;
|
||||
}
|
||||
|
||||
int64_t GetSystemTimeInSeconds()
|
||||
{
|
||||
return GetTimeMicros()/1000000;
|
||||
}
|
||||
|
||||
/** Return a time useful for the debug log */
|
||||
int64_t GetLogTimeMicros()
|
||||
{
|
||||
|
@ -9,9 +9,20 @@
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
|
||||
/**
|
||||
* GetTimeMicros() and GetTimeMillis() both return the system time, but in
|
||||
* different units. GetTime() returns the sytem time in seconds, but also
|
||||
* supports mocktime, where the time can be specified by the user, eg for
|
||||
* testing (eg with the setmocktime rpc, or -mocktime argument).
|
||||
*
|
||||
* TODO: Rework these functions to be type-safe (so that we don't inadvertently
|
||||
* compare numbers with different units, or compare a mocktime to system time).
|
||||
*/
|
||||
|
||||
int64_t GetTime();
|
||||
int64_t GetTimeMillis();
|
||||
int64_t GetTimeMicros();
|
||||
int64_t GetSystemTimeInSeconds(); // Like GetTime(), but not mockable
|
||||
int64_t GetLogTimeMicros();
|
||||
void SetMockTime(int64_t nMockTimeIn);
|
||||
void MilliSleep(int64_t n);
|
||||
|
Loading…
Reference in New Issue
Block a user