From b32947abbb17c905447b97fed3bf490db25a1252 Mon Sep 17 00:00:00 2001 From: Steven Wu Date: Thu, 12 Jun 2025 09:48:14 -0700 Subject: [PATCH] [swift] Get correct ExitStatus if swift tasks receives signal When swift tasks failed with signal, make sure the build system tag that as a signal/exception instead of a regular exit with non-zero error code. --- .../TaskActions/SwiftDriverJobTaskAction.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift b/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift index 84eee1613..7851c42d7 100644 --- a/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift +++ b/Sources/SWBTaskExecution/TaskActions/SwiftDriverJobTaskAction.swift @@ -469,6 +469,10 @@ public final class SwiftDriverJobTaskAction: TaskAction, BuildValueValidatingTas } func processFinished(result: CommandExtendedResult) { + guard let status = Processes.ExitStatus.init(rawValue: result.exitStatus) else { + // nil means the job is stopped or continued. It should not call finished. + return + } // This may be updated by commandStarted in the case of certain failures, // so only update the exit status in output delegate if it is nil. if outputDelegate.result == nil { @@ -476,7 +480,7 @@ public final class SwiftDriverJobTaskAction: TaskAction, BuildValueValidatingTas } self._commandResult = result.result do { - try plannedBuild?.jobFinished(job: driverJob, arguments: arguments, pid: pid.pid, environment: environment, exitStatus: .exit(result.exitStatus), output: output) + try plannedBuild?.jobFinished(job: driverJob, arguments: arguments, pid: pid.pid, environment: environment, exitStatus: status, output: output) } catch { executionError = error.localizedDescription }