From 89de404f0b71764b6d15499e793daa6f9ca07e84 Mon Sep 17 00:00:00 2001 From: zhangweihua Date: Thu, 11 Sep 2025 16:18:31 +0800 Subject: [PATCH 1/3] deadlock bugfix Signed-off-by: zhangweihua --- window_scene/screen_session_manager_client/BUILD.gn | 2 ++ .../include/screen_session_manager_client.h | 3 +++ .../src/screen_session_manager_client.cpp | 13 ++++++++----- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/window_scene/screen_session_manager_client/BUILD.gn b/window_scene/screen_session_manager_client/BUILD.gn index d3bf76651e..6257b70fab 100644 --- a/window_scene/screen_session_manager_client/BUILD.gn +++ b/window_scene/screen_session_manager_client/BUILD.gn @@ -38,6 +38,7 @@ ohos_shared_library("screen_session_manager_client") { } sources = [ "../screen_session_manager/src/zidl/screen_session_manager_proxy.cpp", + "../session_manager/src/ffrt_queue_helper.cpp", "src/screen_session_manager_client.cpp", "src/zidl/screen_session_manager_client_stub.cpp", ] @@ -52,6 +53,7 @@ ohos_shared_library("screen_session_manager_client") { external_deps = [ "c_utils:utils", + "ffrt:libffrt", "graphic_2d:librender_service_base", "graphic_2d:librender_service_client", "hilog:libhilog", diff --git a/window_scene/screen_session_manager_client/include/screen_session_manager_client.h b/window_scene/screen_session_manager_client/include/screen_session_manager_client.h index be9a5f9665..0eef72198f 100644 --- a/window_scene/screen_session_manager_client/include/screen_session_manager_client.h +++ b/window_scene/screen_session_manager_client/include/screen_session_manager_client.h @@ -26,6 +26,7 @@ #include "display_change_info.h" #include "dm_common.h" #include "session/screen/include/screen_session.h" +#include "session_manager/include/ffrt_queue_helper.h" #include "interfaces/include/ws_common.h" #include "wm_single_instance.h" #include "zidl/screen_session_manager_client_stub.h" @@ -180,6 +181,8 @@ private: sptr screenSessionManager_; + std::shared_ptr ffrtQueueHelper_ = std::make_shared(); + IScreenConnectionListener* screenConnectionListener_; sptr screenConnectionChangeListener_; sptr displayChangeListener_; diff --git a/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp b/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp index 6c3a7e408d..3edf286950 100644 --- a/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp +++ b/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp @@ -1249,12 +1249,15 @@ std::string ScreenSessionManagerClient::OnDumperClientScreenSessions() void ScreenSessionManagerClient::SetDefaultMultiScreenModeWhenSwitchUser() { - if (!screenSessionManager_) { - TLOGE(WmsLogTag::DMS, "screenSessionManager_ is null"); + auto task = [=] { + if (!screenSessionManager_) { + TLOGE(WmsLogTag::DMS, "screenSessionManager_ is null"); + return; + } + screenSessionManager_->SetDefaultMultiScreenModeWhenSwitchUser(); return; - } - screenSessionManager_->SetDefaultMultiScreenModeWhenSwitchUser(); - return; + }; + ffrtQueueHelper_->SubmitTask(task); } void ScreenSessionManagerClient::NotifyExtendScreenCreateFinish() -- Gitee From 8699e712d0afc2780ae451114972d52b172312b7 Mon Sep 17 00:00:00 2001 From: zhangweihua Date: Thu, 11 Sep 2025 19:14:46 +0800 Subject: [PATCH 2/3] codecheck bugfix Signed-off-by: zhangweihua --- .../src/connection/screen_session_ability_connection.cpp | 4 ++++ .../src/screen_session_manager_client.cpp | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/window_scene/screen_session_manager/src/connection/screen_session_ability_connection.cpp b/window_scene/screen_session_manager/src/connection/screen_session_ability_connection.cpp index af55e74df9..d67bddaa36 100644 --- a/window_scene/screen_session_manager/src/connection/screen_session_ability_connection.cpp +++ b/window_scene/screen_session_manager/src/connection/screen_session_ability_connection.cpp @@ -223,6 +223,10 @@ bool ScreenSessionAbilityConnection::ScreenSessionConnectExtension(const std::st TLOGI(WmsLogTag::DMS, "bundleName:%{public}s, abilityName:%{public}s", bundleName.c_str(), abilityName.c_str()); OHOS::sptr systemAbilityManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (systemAbilityManager == nullptr) { + TLOGE(WmsLogTag::DMS, "GetSystemAbilityManager failed"); + return false; + } OHOS::sptr remoteObject = systemAbilityManager->GetSystemAbility(BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); if (remoteObject == nullptr) { diff --git a/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp b/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp index 3edf286950..2133835149 100644 --- a/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp +++ b/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp @@ -1249,12 +1249,14 @@ std::string ScreenSessionManagerClient::OnDumperClientScreenSessions() void ScreenSessionManagerClient::SetDefaultMultiScreenModeWhenSwitchUser() { - auto task = [=] { - if (!screenSessionManager_) { + wptr screenSessionManagerWptr = screenSessionManager_; + auto task = [screenSessionManagerWptr] { + auto screenSessionManager = screenSessionManagerWptr.promote(); + if (!screenSessionManager) { TLOGE(WmsLogTag::DMS, "screenSessionManager_ is null"); return; } - screenSessionManager_->SetDefaultMultiScreenModeWhenSwitchUser(); + screenSessionManager->SetDefaultMultiScreenModeWhenSwitchUser(); return; }; ffrtQueueHelper_->SubmitTask(task); -- Gitee From a19c6ca84d661f5252aad771f9f5094c5465a016 Mon Sep 17 00:00:00 2001 From: zhangweihua Date: Thu, 11 Sep 2025 21:32:21 +0800 Subject: [PATCH 3/3] codecheck bugfix Signed-off-by: zhangweihua --- .../src/screen_session_manager_client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp b/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp index 2133835149..27998b4db2 100644 --- a/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp +++ b/window_scene/screen_session_manager_client/src/screen_session_manager_client.cpp @@ -1259,7 +1259,7 @@ void ScreenSessionManagerClient::SetDefaultMultiScreenModeWhenSwitchUser() screenSessionManager->SetDefaultMultiScreenModeWhenSwitchUser(); return; }; - ffrtQueueHelper_->SubmitTask(task); + ffrtQueueHelper_->SubmitTask(std::move(task)); } void ScreenSessionManagerClient::NotifyExtendScreenCreateFinish() -- Gitee