diff --git a/services/backup_sa/include/module_ipc/svc_restore_deps_manager.h b/services/backup_sa/include/module_ipc/svc_restore_deps_manager.h index d830cb2b6152558e181544e9b3adc3858efd8147..cb83798b9109353e6a7542023014105c1996166f 100644 --- a/services/backup_sa/include/module_ipc/svc_restore_deps_manager.h +++ b/services/backup_sa/include/module_ipc/svc_restore_deps_manager.h @@ -43,7 +43,7 @@ public: void AddRestoredBundles(const string &bundleName); vector GetAllBundles() const; bool IsAllBundlesRestored() const; - void UpdateToRestoreBundleMap(const string &bundleName, const string &fileName); + bool UpdateToRestoreBundleMap(const string &bundleName, const string &fileName); private: SvcRestoreDepsManager() {} diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 5151796a3cd51f60db5a0aada505bc2d255437f8..5242d8567e380a174b922255ad2470ef3fdcc6af 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -282,7 +282,7 @@ static vector GetRestoreBundleNames(UniqueFd fd, .spaceOccupied = (*it).spaceOccupied, .allToBackup = (*it).allToBackup, .extensionName = restoreInfo.extensionName, - .restoreDeps = (*it).restoreDeps}; + .restoreDeps = restoreInfo.restoreDeps}; restoreBundleInfos.emplace_back(info); } return restoreBundleInfos; @@ -540,6 +540,11 @@ ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) try { HILOGI("Begin"); VerifyCaller(IServiceReverse::Scenario::RESTORE); + + bool updateRes = SvcRestoreDepsManager::GetInstance().UpdateToRestoreBundleMap(bundleName, fileName); + if (updateRes) { + return BError(BError::Codes::OK); + } auto action = session_->GetServiceSchedAction(bundleName); if (action == BConstants::ServiceSchedAction::RUNNING) { auto backUpConnection = session_->GetExtConnection(bundleName); @@ -553,7 +558,6 @@ ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) } session_->GetServiceReverseProxy()->RestoreOnFileReady(bundleName, fileName, move(fd)); } else { - SvcRestoreDepsManager::GetInstance().UpdateToRestoreBundleMap(bundleName, fileName); session_->SetExtFileNameRequest(bundleName, fileName); } return BError(BError::Codes::OK); diff --git a/services/backup_sa/src/module_ipc/svc_restore_deps_manager.cpp b/services/backup_sa/src/module_ipc/svc_restore_deps_manager.cpp index 4f760ba8df4be6ef90faedf063b2f0999d4dce7c..115db71c495443b2d8149ecec32c30ac24481fba 100644 --- a/services/backup_sa/src/module_ipc/svc_restore_deps_manager.cpp +++ b/services/backup_sa/src/module_ipc/svc_restore_deps_manager.cpp @@ -151,13 +151,15 @@ bool SvcRestoreDepsManager::IsAllBundlesRestored() const return toRestoreBundleMap_.empty(); } -void SvcRestoreDepsManager::UpdateToRestoreBundleMap(const string &bundleName, const string &fileName) +bool SvcRestoreDepsManager::UpdateToRestoreBundleMap(const string &bundleName, const string &fileName) { unique_lock lock(lock_); auto it = toRestoreBundleMap_.find(bundleName); if (it != toRestoreBundleMap_.end()) { it->second.fileNames_.insert(fileName); + return true; } + return false; } } // namespace OHOS::FileManagement::Backup \ No newline at end of file