X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/4c1281bba5d3e01d677165b6e2fa7d9209e233b5..f87bda0e69ec38a7485f250328c32643c5587fd8:/services/crunch-dispatch-local/crunch-dispatch-local.go diff --git a/services/crunch-dispatch-local/crunch-dispatch-local.go b/services/crunch-dispatch-local/crunch-dispatch-local.go index e575839040..eb8550eceb 100644 --- a/services/crunch-dispatch-local/crunch-dispatch-local.go +++ b/services/crunch-dispatch-local/crunch-dispatch-local.go @@ -7,6 +7,7 @@ import ( "os" "os/exec" "os/signal" + "sync" "syscall" "time" ) @@ -52,16 +53,22 @@ func doMain() error { sigChan = make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) go func(sig <-chan os.Signal) { + var wg sync.WaitGroup for sig := range sig { doneProcessing <- true caught := sig for uuid, cmd := range runningCmds { - cmd.Process.Signal(caught) - if _, err := cmd.Process.Wait(); err != nil { - log.Printf("Error while waiting for process to finish for %v: %q", uuid, err) - } + go func(uuid string) { + wg.Add(1) + defer wg.Done() + cmd.Process.Signal(caught) + if _, err := cmd.Process.Wait(); err != nil { + log.Printf("Error while waiting for process to finish for %v: %q", uuid, err) + } + }(uuid) } } + wg.Wait() }(sigChan) // channel to terminate