diff --git a/src/platform/Darwin/DnssdContexts.cpp b/src/platform/Darwin/DnssdContexts.cpp index 46c7bb34fc4365..7dc5956845414f 100644 --- a/src/platform/Darwin/DnssdContexts.cpp +++ b/src/platform/Darwin/DnssdContexts.cpp @@ -492,10 +492,7 @@ ResolveContext::ResolveContext(DiscoverNodeDelegate * delegate, chip::Inet::IPAd ResolveContext::~ResolveContext() { - if (isSRPTimerRunning) - { - CancelSRPTimer(); - } + CancelSRPTimerIfRunning(); } void ResolveContext::DispatchFailure(const char * errorStr, CHIP_ERROR err) @@ -647,10 +644,14 @@ void ResolveContext::SRPTimerExpiredCallback(chip::System::Layer * systemLayer, sdCtx->Finalize(); } -void ResolveContext::CancelSRPTimer() +void ResolveContext::CancelSRPTimerIfRunning() { - DeviceLayer::SystemLayer().CancelTimer(SRPTimerExpiredCallback, static_cast(this)); - ChipLogProgress(Discovery, "SRP resolve timer for %s cancelled; resolve timed out", instanceName.c_str()); + if (isSRPTimerRunning) + { + DeviceLayer::SystemLayer().CancelTimer(SRPTimerExpiredCallback, static_cast(this)); + ChipLogProgress(Discovery, "SRP resolve timer for %s cancelled; resolve timed out", instanceName.c_str()); + isSRPTimerRunning = false; + } } CHIP_ERROR ResolveContext::OnNewAddress(const InterfaceKey & interfaceKey, const struct sockaddr * address) diff --git a/src/platform/Darwin/DnssdImpl.cpp b/src/platform/Darwin/DnssdImpl.cpp index 1de1fac5dbd1c5..4156c7a4bf0924 100644 --- a/src/platform/Darwin/DnssdImpl.cpp +++ b/src/platform/Darwin/DnssdImpl.cpp @@ -275,9 +275,9 @@ static void OnGetAddrInfo(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t i // If we now don't need to have a timer while we wait for SRP results, ensure that there is no such // timer running. Otherwise the timer could fire before we get the rest of the results that flags // say are coming, and trigger a finalize before we have all the data that is already available. - if (sdCtx->isSRPTimerRunning && !sdCtx->shouldStartSRPTimerForResolve) + if (!sdCtx->shouldStartSRPTimerForResolve) { - sdCtx->CancelSRPTimer(); + sdCtx->CancelSRPTimerIfRunning(); } return; } diff --git a/src/platform/Darwin/DnssdImpl.h b/src/platform/Darwin/DnssdImpl.h index 50042ac378fd94..42ae55fdd9d4c0 100644 --- a/src/platform/Darwin/DnssdImpl.h +++ b/src/platform/Darwin/DnssdImpl.h @@ -301,7 +301,7 @@ struct ResolveContext : public GenericContext * @brief Cancels the timer that was started to wait for the resolution on the kSRPDot domain to happen. * */ - void CancelSRPTimer(); + void CancelSRPTimerIfRunning(); private: /**