From 501035d0ffbd95c7b08b4b19c854d2ad19580b61 Mon Sep 17 00:00:00 2001 From: yuwenze Date: Thu, 25 May 2023 09:03:37 +0000 Subject: [PATCH] fixed crash Signed-off-by: yuwenze Change-Id: I0e7c2ac365bf02bc937d9196242664d404b98ad2 --- .../include/ability_connect_manager.h | 4 ++-- .../abilitymgr/src/ability_connect_manager.cpp | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/services/abilitymgr/include/ability_connect_manager.h b/services/abilitymgr/include/ability_connect_manager.h index 7adc7a09a1b..594e8773cd2 100644 --- a/services/abilitymgr/include/ability_connect_manager.h +++ b/services/abilitymgr/include/ability_connect_manager.h @@ -469,8 +469,8 @@ private: private: void TerminateRecord(std::shared_ptr abilityRecord); - int DisconnectRecordNormal(std::shared_ptr connectRecord); - void DisconnectRecordForce(std::shared_ptr connectRecord); + int DisconnectRecordNormal(ConnectListType &list, std::shared_ptr connectRecord) const; + void DisconnectRecordForce(ConnectListType &list, std::shared_ptr connectRecord); private: const std::string TASK_ON_CALLBACK_DIED = "OnCallbackDiedTask"; diff --git a/services/abilitymgr/src/ability_connect_manager.cpp b/services/abilitymgr/src/ability_connect_manager.cpp index 5283da12c2a..3b5d1725b56 100644 --- a/services/abilitymgr/src/ability_connect_manager.cpp +++ b/services/abilitymgr/src/ability_connect_manager.cpp @@ -378,6 +378,7 @@ int AbilityConnectManager::DisconnectAbilityLocked(const sptrGetAbilityRecord(); @@ -393,9 +394,9 @@ int AbilityConnectManager::DisconnectAbilityLocked(const sptr abili abilityRecord->Terminate(timeoutTask); } -int AbilityConnectManager::DisconnectRecordNormal(std::shared_ptr connectRecord) +int AbilityConnectManager::DisconnectRecordNormal(ConnectListType &list, + std::shared_ptr connectRecord) const { auto result = connectRecord->DisconnectAbility(); if (result != ERR_OK) { @@ -430,12 +435,13 @@ int AbilityConnectManager::DisconnectRecordNormal(std::shared_ptrGetConnectState() == ConnectionState::DISCONNECTED) { HILOG_WARN("This record: %{public}d complete disconnect directly.", connectRecord->GetRecordId()); connectRecord->CompleteDisconnect(ERR_OK, false); - RemoveConnectionRecordFromMap(connectRecord); + list.emplace_back(connectRecord); } return ERR_OK; } -void AbilityConnectManager::DisconnectRecordForce(std::shared_ptr connectRecord) +void AbilityConnectManager::DisconnectRecordForce(ConnectListType &list, + std::shared_ptr connectRecord) { auto abilityRecord = connectRecord->GetAbilityRecord(); if (abilityRecord == nullptr) { @@ -444,7 +450,7 @@ void AbilityConnectManager::DisconnectRecordForce(std::shared_ptrRemoveConnectRecordFromList(connectRecord); connectRecord->CompleteDisconnect(ERR_OK, true); - RemoveConnectionRecordFromMap(connectRecord); + list.emplace_back(connectRecord); if (abilityRecord->IsConnectListEmpty() && abilityRecord->GetStartId() == 0) { HILOG_WARN("Force terminate ability record state: %{public}d.", abilityRecord->GetAbilityState()); TerminateRecord(abilityRecord); -- Gitee