From afbf7340fcee49a471ca27ba72476c56f3dbe818 Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Wed, 5 Mar 2025 14:26:11 +0100 Subject: [PATCH 1/3] chore: related timer with ctx.Done --- cmd/hook.go | 17 +++++++++-------- cmd/hook_test.go | 5 +++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/cmd/hook.go b/cmd/hook.go index 495dbbd79d..8e41ed6562 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,15 @@ 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() { + select { + case <-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 dd8551da6d..d643bba303 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") From c45afea007eb60ce1339ceca5b0d26c14715df93 Mon Sep 17 00:00:00 2001 From: Ludovic Fernandez Date: Wed, 5 Mar 2025 14:42:56 +0100 Subject: [PATCH 2/3] review Co-authored-by: Dominik Menke --- cmd/hook.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/cmd/hook.go b/cmd/hook.go index 8e41ed6562..d519873bdc 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -49,12 +49,10 @@ func launchHook(hook string, timeout time.Duration, meta map[string]string) erro } go func() { - select { - case <-ctxCmd.Done(): - if ctxCmd.Err() != nil { - _ = cmd.Process.Kill() - _ = stdout.Close() - } + <-ctxCmd.Done(): + if ctxCmd.Err() != nil { + _ = cmd.Process.Kill() + _ = stdout.Close() } }() From 40b37fe8f03ab4f5ea8eeeb527ee6f91b395d242 Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Wed, 5 Mar 2025 14:46:21 +0100 Subject: [PATCH 3/3] typo --- cmd/hook.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/hook.go b/cmd/hook.go index d519873bdc..c1de29c584 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -49,7 +49,7 @@ func launchHook(hook string, timeout time.Duration, meta map[string]string) erro } go func() { - <-ctxCmd.Done(): + <-ctxCmd.Done() if ctxCmd.Err() != nil { _ = cmd.Process.Kill() _ = stdout.Close()