From 13e5a5965458131e756dbfd0ade2bee55db3a116 Mon Sep 17 00:00:00 2001 From: "nswangguoliang@huawei.com" Date: Fri, 29 Dec 2023 21:06:18 +0800 Subject: [PATCH] web map mutex Signed-off-by: nswangguoliang@huawei.com --- .../accessibility/browser_accessibility_ohos.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/content/browser/accessibility/browser_accessibility_ohos.cc b/content/browser/accessibility/browser_accessibility_ohos.cc index 6e92903056..50bb37ba65 100644 --- a/content/browser/accessibility/browser_accessibility_ohos.cc +++ b/content/browser/accessibility/browser_accessibility_ohos.cc @@ -16,6 +16,7 @@ #include "content/browser/accessibility/browser_accessibility_ohos.h" #include #include +#include #include "content/browser/accessibility/browser_accessibility_manager_ohos.h" #include "content/public/common/content_client.h" #include "ohos_nweb/src/cef_delegate/nweb_accessibility_utils.h" @@ -30,6 +31,7 @@ using AccessibilityIdMap = std::unordered_map; base::LazyInstance::Leaky g_accessibility_id_map = LAZY_INSTANCE_INITIALIZER; +std::mutex g_accessibility_id_map_lock; std::unique_ptr BrowserAccessibility::Create( BrowserAccessibilityManager* manager, @@ -42,13 +44,19 @@ BrowserAccessibilityOHOS::BrowserAccessibilityOHOS( BrowserAccessibilityManager* manager, ui::AXNode* node) : BrowserAccessibility(manager, node) { + std::unique_lock lock(g_accessibility_id_map_lock); accessibility_id_ = BrowserAccessibilityManagerOHOS::GenerateAccessibilityId(); - g_accessibility_id_map.Get()[accessibility_id_] = this; + if (accessibility_id_ >= 0) { + g_accessibility_id_map.Get()[accessibility_id_] = this; + } } BrowserAccessibilityOHOS::~BrowserAccessibilityOHOS() { - g_accessibility_id_map.Get().erase(accessibility_id_); + std::unique_lock lock(g_accessibility_id_map_lock); + if (accessibility_id_ >= 0) { + g_accessibility_id_map.Get().erase(accessibility_id_); + } } int32_t BrowserAccessibilityOHOS::GetAccessibilityId() const { @@ -381,6 +389,7 @@ bool BrowserAccessibilityOHOS::IsHierarchical() const { BrowserAccessibilityOHOS* BrowserAccessibilityOHOS::GetFromAccessibilityId( int32_t accessibility_id) { + std::unique_lock lock(g_accessibility_id_map_lock); AccessibilityIdMap* accessibility_ids = g_accessibility_id_map.Pointer(); auto iter = accessibility_ids->find(accessibility_id); if (iter != accessibility_ids->end()) -- Gitee