From 0ed517279bca2dab9fef05f844f3fefd011acff2 Mon Sep 17 00:00:00 2001 From: Fletcher Dunn Date: Tue, 6 Jul 2021 15:17:04 -0700 Subject: [PATCH] Change "deadline < usecNow" to "deadline <= useNow" in several places. We often schedule a wakeup *exactly* at the deadline. The OS almost never wakes us up at *exactly* the right time. But when it does, we can get confused, setting a deadline for the current time, and then not taking action on the thing we requested the wakeup call for, and setting the deadline again. P4:6653641 --- .../clientlib/steamnetworkingsockets_p2p.cpp | 2 +- .../steamnetworking_statsutils.h | 6 +++--- .../steamnetworkingsockets_stats.cpp | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_p2p.cpp b/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_p2p.cpp index fbc5a6b..4ccc27e 100644 --- a/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_p2p.cpp +++ b/src/steamnetworkingsockets/clientlib/steamnetworkingsockets_p2p.cpp @@ -2295,7 +2295,7 @@ void CConnectionTransportP2PBase::P2PTransportThink( SteamNetworkingMicroseconds // Check for reply timeout if ( m_usecEndToEndInFlightReplyTimeout ) { - if ( m_usecEndToEndInFlightReplyTimeout < usecNow ) + if ( m_usecEndToEndInFlightReplyTimeout <= usecNow ) { m_usecEndToEndInFlightReplyTimeout = 0; ++m_nReplyTimeoutsSinceLastRecv; diff --git a/src/steamnetworkingsockets/steamnetworking_statsutils.h b/src/steamnetworkingsockets/steamnetworking_statsutils.h index 7cba184..ca5f7f3 100644 --- a/src/steamnetworkingsockets/steamnetworking_statsutils.h +++ b/src/steamnetworkingsockets/steamnetworking_statsutils.h @@ -771,13 +771,13 @@ protected: inline static void ThinkInternal( TLinkStatsTracker *pThis, SteamNetworkingMicroseconds usecNow ) { // Check for ending the current QoS interval - if ( !pThis->m_bPassive && pThis->m_usecIntervalStart + k_usecSteamDatagramLinkStatsDefaultInterval < usecNow ) + if ( !pThis->m_bPassive && pThis->m_usecIntervalStart + k_usecSteamDatagramLinkStatsDefaultInterval <= usecNow ) { pThis->UpdateInterval( usecNow ); } // Check for reply timeout. - if ( pThis->m_usecInFlightReplyTimeout > 0 && pThis->m_usecInFlightReplyTimeout < usecNow ) + if ( pThis->m_usecInFlightReplyTimeout > 0 && pThis->m_usecInFlightReplyTimeout <= usecNow ) { pThis->InFlightReplyTimeout( usecNow ); } @@ -1027,7 +1027,7 @@ protected: { LinkStatsTrackerBase::ThinkInternal( pThis, usecNow ); - if ( pThis->m_usecSpeedIntervalStart + k_usecSteamDatagramSpeedStatsDefaultInterval < usecNow ) + if ( pThis->m_usecSpeedIntervalStart + k_usecSteamDatagramSpeedStatsDefaultInterval <= usecNow ) { pThis->UpdateSpeedInterval( usecNow ); } diff --git a/src/steamnetworkingsockets/steamnetworkingsockets_stats.cpp b/src/steamnetworkingsockets/steamnetworkingsockets_stats.cpp index 61bfc60..02a698d 100644 --- a/src/steamnetworkingsockets/steamnetworkingsockets_stats.cpp +++ b/src/steamnetworkingsockets/steamnetworkingsockets_stats.cpp @@ -422,17 +422,17 @@ int LinkStatsTrackerBase::GetStatsSendNeed( SteamNetworkingMicroseconds usecNow // Message already in flight? if ( m_pktNumInFlight == 0 && !m_bPassive ) { - if ( m_usecPeerAckedInstaneous + k_usecLinkStatsInstantaneousReportInterval < usecNow && BCheckHaveDataToSendInstantaneous( usecNow ) ) + if ( m_usecPeerAckedInstaneous + k_usecLinkStatsInstantaneousReportInterval <= usecNow && BCheckHaveDataToSendInstantaneous( usecNow ) ) { - if ( m_usecPeerAckedInstaneous + k_usecLinkStatsInstantaneousReportMaxInterval < usecNow ) + if ( m_usecPeerAckedInstaneous + k_usecLinkStatsInstantaneousReportMaxInterval <= usecNow ) nResult |= k_nSendStats_Instantanous_Due; else nResult |= k_nSendStats_Instantanous_Ready; } - if ( m_usecPeerAckedLifetime + k_usecLinkStatsLifetimeReportInterval < usecNow && BCheckHaveDataToSendLifetime( usecNow ) ) + if ( m_usecPeerAckedLifetime + k_usecLinkStatsLifetimeReportInterval <= usecNow && BCheckHaveDataToSendLifetime( usecNow ) ) { - if ( m_usecPeerAckedInstaneous + k_usecLinkStatsLifetimeReportMaxInterval < usecNow ) + if ( m_usecPeerAckedInstaneous + k_usecLinkStatsLifetimeReportMaxInterval <= usecNow ) nResult |= k_nSendStats_Lifetime_Due; else nResult |= k_nSendStats_Lifetime_Ready; @@ -454,7 +454,7 @@ const char *LinkStatsTrackerBase::InternalGetSendStatsReasonOrUpdateNextThinkTim return nullptr; int n = 0; - if ( m_usecPeerAckedInstaneous + k_usecLinkStatsInstantaneousReportMaxInterval < usecNow && BCheckHaveDataToSendInstantaneous( usecNow ) ) + if ( m_usecPeerAckedInstaneous + k_usecLinkStatsInstantaneousReportMaxInterval <= usecNow && BCheckHaveDataToSendInstantaneous( usecNow ) ) { n |= 1; } @@ -464,7 +464,7 @@ const char *LinkStatsTrackerBase::InternalGetSendStatsReasonOrUpdateNextThinkTim if ( usecNextCheck < inOutNextThinkTime ) inOutNextThinkTime = usecNextCheck; } - if ( m_usecPeerAckedLifetime + k_usecLinkStatsLifetimeReportMaxInterval < usecNow && BCheckHaveDataToSendLifetime( usecNow ) ) + if ( m_usecPeerAckedLifetime + k_usecLinkStatsLifetimeReportMaxInterval <= usecNow && BCheckHaveDataToSendLifetime( usecNow ) ) { n |= 2; }