From dab034d8edaabd1c183f99c33815dae151af6ab4 Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Sat, 23 Jan 2021 15:16:57 -0500 Subject: Fix race condition in signal handling Signed-off-by: Dave Henderson --- plugins.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'plugins.go') diff --git a/plugins.go b/plugins.go index 4beedd3a..789fca96 100644 --- a/plugins.go +++ b/plugins.go @@ -85,19 +85,28 @@ func (p *plugin) run(args ...interface{}) (interface{}, error) { outBuf := &bytes.Buffer{} c.Stdout = outBuf + start := time.Now() + err := c.Start() + if err != nil { + return nil, err + } + // make sure all signals are propagated sigs := make(chan os.Signal, 1) signal.Notify(sigs) go func() { - // Pass signals to the sub-process - sig := <-sigs - if c.Process != nil { - // nolint: gosec - _ = c.Process.Signal(sig) + select { + case sig := <-sigs: + // Pass signals to the sub-process + if c.Process != nil { + // nolint: gosec + _ = c.Process.Signal(sig) + } + case <-ctx.Done(): } }() - start := time.Now() - err := c.Run() + + err = c.Wait() elapsed := time.Since(start) if ctx.Err() != nil { -- cgit v1.2.3