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 5cd28ce653282655d542de5b188a5de44303a5eb..72ae93dc680cc0829cb338828a0fbb19d6a510b9 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 9686930e656fef3204d54f96a6142baa4be6c751..1c06adbe2672c6ba4b7e45eaa294efb993b361a0 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;