From e73f0d6067b5b2e595e574ad4fdd126f7bb3954c Mon Sep 17 00:00:00 2001 From: AXYChen Date: Wed, 2 Jul 2025 15:59:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E5=85=A8=E6=8E=A7=E4=BB=B6=E7=9A=84?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E5=A2=9E=E5=8A=A0=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: AXYChen Change-Id: Ie8d0931fb255e612bd35234b5dc0105a34892589 --- .../cpp/include/seccomp/sec_comp_monitor.h | 2 + .../main/cpp/src/seccomp/sec_comp_monitor.cpp | 38 +++++++++++-------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/services/accesstokenmanager/main/cpp/include/seccomp/sec_comp_monitor.h b/services/accesstokenmanager/main/cpp/include/seccomp/sec_comp_monitor.h index 5cd28ce65..72ae93dc6 100644 --- a/services/accesstokenmanager/main/cpp/include/seccomp/sec_comp_monitor.h +++ b/services/accesstokenmanager/main/cpp/include/seccomp/sec_comp_monitor.h @@ -58,7 +58,9 @@ private: SecCompMonitor(); void InitAppObserver(); DISALLOW_COPY_AND_MOVE(SecCompMonitor); + std::mutex observerMutex_; sptr observer_ = nullptr; + std::mutex appManagerDeathMutex_; std::shared_ptr appManagerDeathCallback_ = nullptr; std::mutex appfgLock_; std::set appsInForeground_; diff --git a/services/accesstokenmanager/main/cpp/src/seccomp/sec_comp_monitor.cpp b/services/accesstokenmanager/main/cpp/src/seccomp/sec_comp_monitor.cpp index 9686930e6..1c06adbe2 100644 --- a/services/accesstokenmanager/main/cpp/src/seccomp/sec_comp_monitor.cpp +++ b/services/accesstokenmanager/main/cpp/src/seccomp/sec_comp_monitor.cpp @@ -111,22 +111,28 @@ SecCompMonitor& SecCompMonitor::GetInstance() void SecCompMonitor::InitAppObserver() { - if (observer_ != nullptr) { - return; - } - observer_ = new (std::nothrow) SecCompUsageObserver(); - if (observer_ == nullptr) { - LOGE(ATM_DOMAIN, ATM_TAG, "New observer failed."); - return; - } - if (AppManagerAccessClient::GetInstance().RegisterApplicationStateObserver(observer_) != 0) { - LOGE(ATM_DOMAIN, ATM_TAG, "Register observer failed."); - observer_ = nullptr; - return; + { + std::lock_guard lock(observerMutex_); + if (observer_ != nullptr) { + return; + } + observer_ = new (std::nothrow) SecCompUsageObserver(); + if (observer_ == nullptr) { + LOGE(ATM_DOMAIN, ATM_TAG, "New observer failed."); + return; + } + if (AppManagerAccessClient::GetInstance().RegisterApplicationStateObserver(observer_) != 0) { + LOGE(ATM_DOMAIN, ATM_TAG, "Register observer failed."); + observer_ = nullptr; + return; + } } - if (appManagerDeathCallback_ == nullptr) { - appManagerDeathCallback_ = std::make_shared(); - AppManagerAccessClient::GetInstance().RegisterDeathCallback(appManagerDeathCallback_); + { + std::lock_guard lock(appManagerDeathMutex_); + if (appManagerDeathCallback_ == nullptr) { + appManagerDeathCallback_ = std::make_shared(); + AppManagerAccessClient::GetInstance().RegisterDeathCallback(appManagerDeathCallback_); + } } } @@ -137,6 +143,7 @@ SecCompMonitor::SecCompMonitor() SecCompMonitor::~SecCompMonitor() { + std::lock_guard lock(observerMutex_); if (observer_ != nullptr) { AppManagerAccessClient::GetInstance().UnregisterApplicationStateObserver(observer_); observer_ = nullptr; @@ -146,6 +153,7 @@ SecCompMonitor::~SecCompMonitor() void SecCompMonitor::OnAppMgrRemoteDiedHandle() { LOGI(ATM_DOMAIN, ATM_TAG, "OnAppMgrRemoteDiedHandle."); + std::lock_guard lock(observerMutex_); if (observer_ != nullptr) { AppManagerAccessClient::GetInstance().UnregisterApplicationStateObserver(observer_); observer_ = nullptr; -- Gitee