diff --git a/src/core/meshcop/dataset_manager.cpp b/src/core/meshcop/dataset_manager.cpp index 11011bc41..9dd70bc2a 100644 --- a/src/core/meshcop/dataset_manager.cpp +++ b/src/core/meshcop/dataset_manager.cpp @@ -167,8 +167,7 @@ Error DatasetManager::Save(const Dataset &aDataset) } else if (compare < 0) { - VerifyOrExit(!Get().IsLeader(), error = kErrorInvalidState); - SendSet(); + mTimer.Start(kSendSetDelay); } SignalDatasetChange(); @@ -279,7 +278,7 @@ void DatasetManager::SendSet(void) Dataset dataset(GetType()); VerifyOrExit(!mCoapPending, error = kErrorBusy); - VerifyOrExit(Get().IsAttached(), error = kErrorInvalidState); + VerifyOrExit(Get().IsChild() || Get().IsRouter(), error = kErrorInvalidState); VerifyOrExit(mLocal.Compare(GetTimestamp()) < 0, error = kErrorInvalidState); if (IsActiveDataset()) @@ -323,7 +322,7 @@ exit: break; case kErrorNoBufs: - mTimer.Start(kDelayNoBufs); + mTimer.Start(kSendSetDelay); OT_FALL_THROUGH; default: @@ -348,7 +347,7 @@ void DatasetManager::HandleCoapResponse(void * aContext, void DatasetManager::HandleCoapResponse(void) { mCoapPending = false; - SendSet(); + mTimer.Start(kSendSetDelay); } void DatasetManager::HandleGet(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo) const diff --git a/src/core/meshcop/dataset_manager.hpp b/src/core/meshcop/dataset_manager.hpp index 5fbcd9446..4010068df 100644 --- a/src/core/meshcop/dataset_manager.hpp +++ b/src/core/meshcop/dataset_manager.hpp @@ -363,7 +363,7 @@ private: enum { kMaxDatasetTlvs = 16, // Maximum number of TLVs in a Dataset. - kDelayNoBufs = 1000, // Milliseconds + kSendSetDelay = 5000, // Milliseconds }; bool mCoapPending : 1;