From ebce285b4c5bff19aaee1732a74a68317c778bfe Mon Sep 17 00:00:00 2001 From: yanglei Date: Tue, 16 Dec 2025 09:59:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E6=8C=81=E6=8C=82=E8=BD=BD=E5=92=8Cst?= =?UTF-8?q?artVRoot=E8=BF=9B=E8=A1=8C=E5=BC=82=E6=AD=A5=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E4=B8=94=E4=B8=8D=E5=8F=AF=E4=BB=A5=E8=AE=A9checkmeasure?= =?UTF-8?q?=E5=92=8CstartVRoot=E5=BC=82=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- virtrust/src/virtrust/api/domain.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/virtrust/src/virtrust/api/domain.cpp b/virtrust/src/virtrust/api/domain.cpp index 2a08f22..26c9f41 100644 --- a/virtrust/src/virtrust/api/domain.cpp +++ b/virtrust/src/virtrust/api/domain.cpp @@ -219,13 +219,17 @@ void FreeMeasureInfo(struct MeasureInfo *bios, struct MeasureInfo *shim, struct } } -bool CheckGuestBeforeStart(std::string_view domainName, std::string &uuid) +bool CheckGuestBeforeStart(std::string_view domainName, std::string &uuid, std::future &asyncStartRoot, + int &startVRootRc) { // 收集需要度量文件的摘要值 VirshMeasureSummary measureSummary(uuid); if (!CalcVirshMeasure(domainName, measureSummary)) { + startVRootRc = asyncStartRoot.get(); return false; } + startVRootRc = asyncStartRoot.get(); + // 转换为tsb-agent需要的结构体 struct MeasureInfo *bios = nullptr; struct MeasureInfo *shim = nullptr; @@ -987,8 +991,8 @@ VirtrustRc DomainStart(const std::unique_ptr &conn, const std::string & std::string uuid = GetUUIDStr(domain->Get()); auto asyncStartVRoot = std::async(&StartVRoot, uuid.data()); VIRTRUST_LOG_INFO("Perform checking on: {} before start", domainName); - auto checkOk = CheckGuestBeforeStart(domainName, uuid); - auto startVRootRc = asyncStartVRoot.get(); + int startVRootRc = 0; + auto checkOk = CheckGuestBeforeStart(domainName, uuid, asyncStartVRoot, startVRootRc); if (!checkOk && startVRootRc == 0) { VIRTRUST_LOG_ERROR("Check domain failed,domainName: {}", domainName); if (StopVRoot(uuid.data()) != 0) { -- Gitee