From bebafef385a0c4b37763b62fc0d1b53d08a75e25 Mon Sep 17 00:00:00 2001 From: g00613291 Date: Wed, 4 Dec 2024 14:39:31 +0800 Subject: [PATCH] fix session occupy Signed-off-by: g00613291 --- services/backup_sa/src/module_ipc/service.cpp | 9 +++++++++ .../backup_sa/module_ipc/service_other_test.cpp | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 7ce63d354..f0e2d9593 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1291,6 +1291,7 @@ void Service::ClearSessionAndSchedInfo(const string &bundleName) HandleRestoreDepsBundle(bundleName); DelClearBundleRecord({bundleName}); if (isOccupyingSession_.load() && session_->IsOnAllBundlesFinished()) { + HILOGI("Cleaning up backup data end."); SetOccupySession(false); StopAll(nullptr, true); return; @@ -1738,6 +1739,14 @@ ErrCode Service::AppendBundlesClearSession(const std::vector &bundle } session_->IncreaseSessionCnt(__PRETTY_FUNCTION__); // BundleMgrAdapter::GetBundleInfos可能耗时 auto backupInfos = BundleMgrAdapter::GetBundleInfos(bundleNames, session_->GetSessionUserId()); + if (backupInfos.empty()) { + if (clearRecorder_ != nullptr) { + clearRecorder_->DeleteConfigFile(); + } + HILOGE("AppendBundles clear session error, backupInfos is empty"); + session_->DecreaseSessionCnt(__PRETTY_FUNCTION__); + return EPERM; + } std::vector supportBundleNames; for (auto info : backupInfos) { std::string bundleNameIndexStr = BJsonUtil::BuildBundleNameIndexInfo(info.name, info.appIndex); diff --git a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp index 1c8d8e720..814af6549 100644 --- a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp @@ -1435,9 +1435,15 @@ HWTEST_F(ServiceTest, SUB_Service_AppendBundlesClearSession_0000, TestSize.Level EXPECT_EQ(ret, EPERM); vector bundleInfos; + BJsonEntityCaps::BundleInfo info; + info.name = "bundleNames"; + info.appIndex = 0; + bundleInfos.push_back(info); EXPECT_CALL(*session, GetSessionUserId()).WillOnce(Return(0)); EXPECT_CALL(*bms, GetBundleInfos(_, _)).WillOnce(Return(bundleInfos)); EXPECT_CALL(*session, IsOnOnStartSched()).WillOnce(Return(false)); + EXPECT_CALL(*jsonUtil, BuildBundleNameIndexInfo(_, _)).WillOnce(Return("bundleName")) + .WillOnce(Return("bundleName")); ret = service->AppendBundlesClearSession({ "bundleNames" }); EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); } catch (...) { -- Gitee