diff --git a/services/aams/src/accessible_ability_manager_service.cpp b/services/aams/src/accessible_ability_manager_service.cpp index 120e990312ea1ae0ad7af4da7a552492517fc77d..eebb81002322409ddfbe0acb10808e6b97d23dff 100644 --- a/services/aams/src/accessible_ability_manager_service.cpp +++ b/services/aams/src/accessible_ability_manager_service.cpp @@ -269,7 +269,7 @@ uint32_t AccessibleAbilityManagerService::RegisterStateObserver( const sptr &callback) { HILOG_DEBUG(); - std::lock_guard lock(mutex_); + if (!callback || !handler_) { HILOG_ERROR("Parameters check failed!"); return 0; @@ -293,10 +293,13 @@ uint32_t AccessibleAbilityManagerService::RegisterStateObserver( return; } callback->AsObject()->AddDeathRecipient(stateCallbackDeathRecipient_); - auto iter = std::find(stateCallbacks_.begin(), stateCallbacks_.end(), callback); - if (iter == stateCallbacks_.end()) { - stateCallbacks_.push_back(callback); - HILOG_INFO("RegisterStateObserver successfully"); + { + std::lock_guard lock(mutex_); + auto iter = std::find(stateCallbacks_.begin(), stateCallbacks_.end(), callback); + if (iter == stateCallbacks_.end()) { + stateCallbacks_.push_back(callback); + HILOG_INFO("RegisterStateObserver successfully"); + } } sptr accountData = GetCurrentAccountData(); @@ -1221,7 +1224,6 @@ void AccessibleAbilityManagerService::UpdateAccessibilityManagerService() void AccessibleAbilityManagerService::UpdateAccessibilityState() { HILOG_DEBUG("start."); - std::lock_guard lock(mutex_); sptr accountData = GetCurrentAccountData(); if (!accountData) { HILOG_ERROR("Account data is null"); @@ -1231,9 +1233,12 @@ void AccessibleAbilityManagerService::UpdateAccessibilityState() if (!(state & STATE_ACCESSIBILITY_ENABLED)) { Singleton::GetInstance().ClearAccessibilityFocused(); } - for (auto &callback : stateCallbacks_) { - if (callback) { - callback->OnStateChanged(state); + { + std::lock_guard lock(mutex_); + for (auto &callback : stateCallbacks_) { + if (callback) { + callback->OnStateChanged(state); + } } } } @@ -2156,7 +2161,6 @@ void AccessibleAbilityManagerService::RemoveCallback(CallBackID callback, const sptr &recipient, const wptr &remote) { HILOG_INFO("remove callback[%{public}d]", callback); - std::lock_guard lock(mutex_); if (!handler_) { HILOG_ERROR("handler is nullptr"); return; @@ -2176,12 +2180,15 @@ void AccessibleAbilityManagerService::RemoveCallback(CallBackID callback, switch (callback) { case STATE_CALLBACK: { - auto iter = std::find_if(stateCallbacks_.begin(), stateCallbacks_.end(), - [remote](const sptr &stateCallback) { - return stateCallback->AsObject() == remote; - }); - if (iter != stateCallbacks_.end()) { - stateCallbacks_.erase(iter); + { + std::lock_guard lock(mutex_); + auto iter = std::find_if(stateCallbacks_.begin(), stateCallbacks_.end(), + [remote](const sptr &stateCallback) { + return stateCallback->AsObject() == remote; + }); + if (iter != stateCallbacks_.end()) { + stateCallbacks_.erase(iter); + } } } break;