From 41ff5e257053b0c87609a7cae37ed5229eaed696 Mon Sep 17 00:00:00 2001 From: luocheng Date: Wed, 28 Jun 2023 03:42:25 +0000 Subject: [PATCH 1/2] update services/aams/src/accessible_ability_manager_service.cpp. Signed-off-by: luocheng --- .../src/accessible_ability_manager_service.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/services/aams/src/accessible_ability_manager_service.cpp b/services/aams/src/accessible_ability_manager_service.cpp index 120e9903..a73593da 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,6 +1233,7 @@ void AccessibleAbilityManagerService::UpdateAccessibilityState() if (!(state & STATE_ACCESSIBILITY_ENABLED)) { Singleton::GetInstance().ClearAccessibilityFocused(); } + std::lock_guard lock(mutex_); for (auto &callback : stateCallbacks_) { if (callback) { callback->OnStateChanged(state); @@ -2156,7 +2159,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,6 +2178,7 @@ void AccessibleAbilityManagerService::RemoveCallback(CallBackID callback, switch (callback) { case STATE_CALLBACK: { + std::lock_guard lock(mutex_); auto iter = std::find_if(stateCallbacks_.begin(), stateCallbacks_.end(), [remote](const sptr &stateCallback) { return stateCallback->AsObject() == remote; -- Gitee From c895575bc326ac959620a9946aca20be298e4d33 Mon Sep 17 00:00:00 2001 From: luocheng Date: Wed, 28 Jun 2023 09:34:14 +0000 Subject: [PATCH 2/2] update services/aams/src/accessible_ability_manager_service.cpp. Signed-off-by: luocheng --- .../accessible_ability_manager_service.cpp | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/services/aams/src/accessible_ability_manager_service.cpp b/services/aams/src/accessible_ability_manager_service.cpp index a73593da..eebb8100 100644 --- a/services/aams/src/accessible_ability_manager_service.cpp +++ b/services/aams/src/accessible_ability_manager_service.cpp @@ -1233,10 +1233,12 @@ void AccessibleAbilityManagerService::UpdateAccessibilityState() if (!(state & STATE_ACCESSIBILITY_ENABLED)) { Singleton::GetInstance().ClearAccessibilityFocused(); } - std::lock_guard lock(mutex_); - for (auto &callback : stateCallbacks_) { - if (callback) { - callback->OnStateChanged(state); + { + std::lock_guard lock(mutex_); + for (auto &callback : stateCallbacks_) { + if (callback) { + callback->OnStateChanged(state); + } } } } @@ -2178,13 +2180,15 @@ void AccessibleAbilityManagerService::RemoveCallback(CallBackID callback, switch (callback) { case STATE_CALLBACK: { - 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); + { + 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; -- Gitee