aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-06 18:38:16 +0900
committerOphestra <cat@gensokyo.uk>2026-05-06 18:38:16 +0900
commit917be2de93000dfc4ecc9a2824271d8f72068796 (patch)
tree11502a09e14704d30bca4910377b99ec82203bb8 /internal
parent9aad98d40988fa40ff55f184cca8e8fd6e3bd989 (diff)
internal/pkg/exec: close early failure before wait
This avoids a deadlock on an early container failure. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal')
-rw-r--r--internal/pkg/exec.go11
1 files 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)