From ee6e6c26ae20de0a406d6aabaefc36f34818ee86 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Tue, 31 Jan 2023 12:11:02 +0100 Subject: [PATCH] worker: ensure children are reaped --- worker/context.go | 11 +++++++---- worker/tasks.go | 10 +++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/worker/context.go b/worker/context.go index bb8ce14..0218d6a 100644 --- a/worker/context.go +++ b/worker/context.go @@ -327,17 +327,20 @@ func (ctx *JobContext) FileSize(path string) (int64, error) { if len(parts) != 2 { return 0, errors.New("Unexpected response from wc") } + if err := wc.Wait(); err != nil { + return 0, err + } return strconv.ParseInt(parts[0], 10, 64) } -func (ctx *JobContext) Download(path string) (io.ReadCloser, error) { +func (ctx *JobContext) Download(path string) (io.ReadCloser, *exec.Cmd, error) { cat := ctx.SSH("cat", path) pipe, err := cat.StdoutPipe() if err != nil { - return nil, err + return nil, nil, err } if err := cat.Start(); err != nil { - return nil, err + return nil, nil, err } - return pipe, nil + return pipe, cat, nil } diff --git a/worker/tasks.go b/worker/tasks.go index 92fb055..2897ac2 100644 --- a/worker/tasks.go +++ b/worker/tasks.go @@ -610,12 +610,13 @@ func (ctx *JobContext) RunTasks() error { } func (ctx *JobContext) isMarkedAsCompleted() bool { - rc, err := ctx.Download(".complete-build") + rc, cmd, err := ctx.Download(".complete-build") if err != nil { return false } + defer rc.Close() b, _ := ioutil.ReadAll(rc) - rc.Close() + cmd.Wait() return strings.TrimSpace(string(b)) == "1" } @@ -689,7 +690,7 @@ func (ctx *JobContext) UploadArtifacts() error { ctx.Log.Printf("%v", err) return err } - pipe, err := ctx.Download(shquote(src)) + pipe, cmd, err := ctx.Download(shquote(src)) if err != nil { ctx.Log.Printf("Error reading artifact file: %v", err) return err @@ -702,6 +703,9 @@ func (ctx *JobContext) UploadArtifacts() error { if err != nil { return err } + if err := cmd.Wait(); err != nil { + return err + } url := fmt.Sprintf("https://%s/%s/%s", upstream, bucket, name) err = ctx.Job.InsertArtifact(src, filepath.Base(src), url, size) if err != nil { -- 2.38.5