From 7d5e246f3fa3b68d167aa435caa5fb744c45fe35 Mon Sep 17 00:00:00 2001 From: wendel Date: Sat, 16 May 2026 17:31:19 +0800 Subject: [PATCH] add lock Signed-off-by: wendel Co-Authored-By: wendel Change-Id: I4a746e832db9d4a2fa6ad639c8b0343a4d876a68 --- .../services/climgr/include/cli_tool_manager_service.h | 1 + .../services/climgr/src/cli_tool_manager_service.cpp | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/cli_tool_framework/services/climgr/include/cli_tool_manager_service.h b/cli_tool_framework/services/climgr/include/cli_tool_manager_service.h index 9a0d0ebac8..7ba379bbe2 100644 --- a/cli_tool_framework/services/climgr/include/cli_tool_manager_service.h +++ b/cli_tool_framework/services/climgr/include/cli_tool_manager_service.h @@ -180,6 +180,7 @@ private: std::atomic interfaceCalledCount_ = 0; ffrt::mutex sessionsMutex_; std::unordered_map> sessionRecords_; + ffrt::mutex observerMutex_; std::unordered_map> bundleObservers_; }; diff --git a/cli_tool_framework/services/climgr/src/cli_tool_manager_service.cpp b/cli_tool_framework/services/climgr/src/cli_tool_manager_service.cpp index a5c2ba443f..63fa25c7d2 100644 --- a/cli_tool_framework/services/climgr/src/cli_tool_manager_service.cpp +++ b/cli_tool_framework/services/climgr/src/cli_tool_manager_service.cpp @@ -659,6 +659,10 @@ void CliToolManagerService::OnProcessDied(const std::string &bundleName, pid_t d { TAG_LOGI(AAFwkTag::CLI_TOOL, "OnProcessDied called: bundleName=%{public}s, diedPid=%{public}d", bundleName.c_str(), diedPid); + { + std::lock_guard guard(observerMutex_); + bundleObservers_.erase(bundleName); + } std::lock_guard guard(sessionsMutex_); // Iterate through sessionRecords_ to find matching SessionRecord by callerPid for (auto iter = sessionRecords_.begin(); iter != sessionRecords_.end();) { @@ -692,6 +696,7 @@ void CliToolManagerService::RegisterAppStateObserver(const std::string &bundleNa bundleName.c_str(), callerPid); // Check if observer already exists for this bundle + std::lock_guard guard(observerMutex_); if (bundleObservers_.find(bundleName) != bundleObservers_.end()) { TAG_LOGI(AAFwkTag::CLI_TOOL, "Observer already registered for bundleName=%{public}s", bundleName.c_str()); return;