From 2bc147f58a53afcbfd9379710d4092d5f945ba25 Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Wed, 5 Mar 2025 15:07:13 +0100 Subject: [PATCH] chore: related timer with context.Done (#2471) Co-authored-by: Dominik Menke --- cmd/hook.go | 15 +++++++-------- cmd/hook_test.go | 5 +++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/cmd/hook.go b/cmd/hook.go index 495dbbd7..c1de29c5 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -11,7 +11,6 @@ import ( "time" "github.com/go-acme/lego/v4/certificate" - "github.com/go-acme/lego/v4/log" ) const ( @@ -49,13 +48,13 @@ func launchHook(hook string, timeout time.Duration, meta map[string]string) erro return fmt.Errorf("start command: %w", err) } - timer := time.AfterFunc(timeout, func() { - log.Println("hook timed out: killing command") - _ = cmd.Process.Kill() - _ = stdout.Close() - }) - - defer timer.Stop() + go func() { + <-ctxCmd.Done() + if ctxCmd.Err() != nil { + _ = cmd.Process.Kill() + _ = stdout.Close() + } + }() scanner := bufio.NewScanner(stdout) for scanner.Scan() { diff --git a/cmd/hook_test.go b/cmd/hook_test.go index dd8551da..d643bba3 100644 --- a/cmd/hook_test.go +++ b/cmd/hook_test.go @@ -8,6 +8,11 @@ import ( "github.com/stretchr/testify/require" ) +func Test_launchHook(t *testing.T) { + err := launchHook("echo foo", 1*time.Second, map[string]string{}) + require.NoError(t, err) +} + func Test_launchHook_errors(t *testing.T) { if runtime.GOOS == "windows" { t.Skip("skipping test on Windows")