From d5cbe068bd817a7ff592db162a1694aacf05a630 Mon Sep 17 00:00:00 2001 From: qianli Date: Wed, 17 May 2023 08:33:59 +0000 Subject: [PATCH] fixed a8be42e from https://gitee.com/du-zhihai/ability_dmsfwk/pulls/611 add send result abnormal situation Signed-off-by: qianli Change-Id: Icaf7b5e46f9ba2fe98544312f9631ff68f85082c --- .../src/distributed_sched_service.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/services/dtbschedmgr/src/distributed_sched_service.cpp b/services/dtbschedmgr/src/distributed_sched_service.cpp index 6143207b..c8676816 100644 --- a/services/dtbschedmgr/src/distributed_sched_service.cpp +++ b/services/dtbschedmgr/src/distributed_sched_service.cpp @@ -84,6 +84,7 @@ const std::string DMS_VERSION_ID = "dmsVersion"; const std::string DMS_CONNECT_TOKEN = "connectToken"; const std::string DMS_VERSION = "4.0.0"; const std::string DMS_MISSION_ID = "dmsMissionId"; +constexpr int32_t DEFAULT_DMS_MISSION_ID = -1; constexpr int32_t DEFAULT_DMS_CONNECT_TOKEN = -1; constexpr int32_t BIND_CONNECT_RETRY_TIMES = 3; constexpr int32_t BIND_CONNECT_TIMEOUT = 500; // 500ms @@ -264,6 +265,26 @@ int32_t DistributedSchedService::SendResultFromRemote(OHOS::AAFwk::Want& want, i HILOGE("check deviceId failed"); return INVALID_REMOTE_PARAMETERS_ERR; } + if (want.GetElement().GetBundleName().empty() && want.GetElement().GetAbilityName().empty()) { + HILOGW("Remote died abnormal"); + int32_t missionId = want.GetIntParam(DMS_MISSION_ID, DEFAULT_DMS_MISSION_ID); + ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->Connect(); + if (ret != ERR_OK) { + HILOGE("connect ability server failed %{public}d", ret); + return ret; + } + MissionInfo missionInfo; + ret = AAFwk::AbilityManagerClient::GetInstance()->GetMissionInfo("", missionId, missionInfo); + if (ret != ERR_OK) { + HILOGE("SendResult failed %{public}d", ret); + return ret; + } + std::string bundleName = missionInfo.want.GetElement().GetBundleName(); + std::string abilityName = missionInfo.want.GetElement().GetAbilityName(); + HILOGD("bundlename: %{public}s, ability is %{public}s", bundleName.c_str(), abilityName.c_str()); + ElementName element{"", bundleName, abilityName}; + want.SetElement(element); + } int32_t result = CheckTargetPermission(want, callerInfo, accountInfo, SEND_RESULT_PERMISSION, false); if (result != ERR_OK) { HILOGE("CheckTargetPermission failed!!");