diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 8a29991ffe33b312b52b61ac38ab6986c00e1a1e..0428e6b290549edb75475e6e4dcddfa812c3d7f0 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -1982,6 +1982,7 @@ int AbilityManagerStub::SendWantSenderInner(MessageParcel &data, MessageParcel & TAG_LOGE(AAFwkTag::ABILITYMGR, "completedData write fail"); } reply.WriteInt32(result); + senderInfo->want.CloseAllFd(); return NO_ERROR; } @@ -1994,6 +1995,7 @@ int AbilityManagerStub::SendLocalWantSenderInner(MessageParcel &data, MessagePar } int32_t result = SendLocalWantSender(*senderInfo); reply.WriteInt32(result); + senderInfo->want.CloseAllFd(); return NO_ERROR; } diff --git a/services/abilitymgr/src/pending_want_manager.cpp b/services/abilitymgr/src/pending_want_manager.cpp index 608a24e219fa8d4118c978f4aef6bc4cfaec11c0..3a6f7eb3a0d2c00e941c6b1cd275fa7377553978 100644 --- a/services/abilitymgr/src/pending_want_manager.cpp +++ b/services/abilitymgr/src/pending_want_manager.cpp @@ -145,6 +145,10 @@ void PendingWantManager::MakeWantSenderCanceledLocked(PendingWantRecord &record) TAG_LOGI(AAFwkTag::WANTAGENT, "cancel"); record.SetCanceled(); + auto wantsInfo = record.GetKey()->GetAllWantsInfos(); + for (auto &wantInfo : wantsInfo) { + wantInfo.want.CloseAllFd(); + } for (auto &callback : record.GetCancelCallbacks()) { callback->Send(record.GetKey()->GetRequestCode()); } diff --git a/test/unittest/want_agent_helper_test/want_agent_helper_test.cpp b/test/unittest/want_agent_helper_test/want_agent_helper_test.cpp index e0c549902296a351568bee3aff42293e9b7b8463..2ab259e881f3aa2cd87e3f5e6f19b7596bab0d0e 100644 --- a/test/unittest/want_agent_helper_test/want_agent_helper_test.cpp +++ b/test/unittest/want_agent_helper_test/want_agent_helper_test.cpp @@ -1156,6 +1156,10 @@ HWTEST_F(WantAgentHelperTest, WantAgentHelper_5500, Function | MediumTest | Leve WantAgentHelper::Cancel(wantAgent, FLAG_ONE_SHOT); type = WantAgentHelper::GetType(wantAgent); EXPECT_EQ(type, WantAgentConstant::OperationType::UNKNOWN_TYPE); + + WantAgentHelper::Cancel(wantAgent); + type = WantAgentHelper::GetType(wantAgent); + EXPECT_EQ(type, WantAgentConstant::OperationType::UNKNOWN_TYPE); } /*