diff --git a/services/param/watcher/agent/watcher_manager_kits.cpp b/services/param/watcher/agent/watcher_manager_kits.cpp index d6acf5b55f492743944deccc22e14f08428b9048..7a9dad1429faedade593a75a4ecf6fa89419f8b4 100644 --- a/services/param/watcher/agent/watcher_manager_kits.cpp +++ b/services/param/watcher/agent/watcher_manager_kits.cpp @@ -279,18 +279,22 @@ int32_t WatcherManagerKits::RemoteWatcher::OnParameterChange( const std::string &prefix, const std::string &name, const std::string &value) { Watcher::OnParameterChange(prefix, name, value); - // get param watcher - WatcherManagerKits::ParamWatcher *watcher = watcherManager_->GetParamWatcher(prefix); + WATCHER_CHECK(watcherManager_ != nullptr, return -1, "Failed to get watcherManager_"); + return watcherManager_->OnParameterChangeWithLock(prefix, name, value); +} + +int32_t WatcherManagerKits::OnParameterChangeWithLock( + const std::string &prefix, const std::string &name, const std::string &value) +{ + WatcherManagerKits::ParamWatcher *watcher = GetParamWatcher(prefix); + std::lock_guard lock(mutex_); WATCHER_CHECK(watcher != nullptr, return -1, "Failed to get watcher '%s'", prefix.c_str()); - if (watcher != nullptr) { - watcher->OnParameterChange(name, value); - } + watcher->OnParameterChange(name, value); return 0; } void WatcherManagerKits::ParamWatcher::OnParameterChange(const std::string &name, const std::string &value) { - std::lock_guard lock(mutex_); WATCHER_LOGV("OnParameterChange name %s value %s", name.c_str(), value.c_str()); uint32_t index = 0; ParameterChangeListener *listener = GetParameterListener(&index); diff --git a/services/param/watcher/agent/watcher_manager_kits.h b/services/param/watcher/agent/watcher_manager_kits.h index 6140a6c23b3fd715c0db3b1babe6796fff7c4c87..da1e768c6cb242d7b14b5d3505d1aa165be169cb 100644 --- a/services/param/watcher/agent/watcher_manager_kits.h +++ b/services/param/watcher/agent/watcher_manager_kits.h @@ -116,6 +116,8 @@ private: std::mutex threadlock_; sptr watcherManager_ {}; sptr deathRecipient_ {}; + int32_t OnParameterChangeWithLock( + const std::string &prefix, const std::string &name, const std::string &value); std::mutex mutex_; uint32_t remoteWatcherId_ = { 0 };