From 917be2de93000dfc4ecc9a2824271d8f72068796 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Wed, 6 May 2026 18:38:16 +0900 Subject: [PATCH] internal/pkg/exec: close early failure before wait This avoids a deadlock on an early container failure. Signed-off-by: Ophestra --- internal/pkg/exec.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/internal/pkg/exec.go b/internal/pkg/exec.go index 9169980d..d0d0b366 100644 --- a/internal/pkg/exec.go +++ b/internal/pkg/exec.go @@ -631,12 +631,6 @@ func (a *execArtifact) cure(f *FContext, hostNet bool) (err error) { _ = stdout.Close() return } - defer func() { - if err != nil && !errors.As(err, new(*exec.ExitError)) { - _ = stdout.Close() - _ = stderr.Close() - } - }() brStdout, brStderr := f.cache.getReader(stdout), f.cache.getReader(stderr) stdoutDone, stderrDone := make(chan struct{}), make(chan struct{}) @@ -651,6 +645,11 @@ func (a *execArtifact) cure(f *FContext, hostNet bool) (err error) { io.TeeReader(brStderr, status), ) defer func() { + if err != nil && !errors.As(err, new(*exec.ExitError)) { + _ = stdout.Close() + _ = stderr.Close() + } + <-stdoutDone <-stderrDone f.cache.putReader(brStdout)