From 70e7f9e4d4af549f0a1584efa1364375e1988be1 Mon Sep 17 00:00:00 2001 From: Janez Podhostnik Date: Wed, 27 Nov 2024 14:40:33 +0100 Subject: [PATCH] Fix closing channel twice --- cmd/run/cmd.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/cmd/run/cmd.go b/cmd/run/cmd.go index e8cab5b8e..f0dca36cc 100644 --- a/cmd/run/cmd.go +++ b/cmd/run/cmd.go @@ -9,6 +9,7 @@ import ( "os" "os/signal" "strings" + "sync" "syscall" "time" @@ -47,17 +48,21 @@ var Cmd = &cobra.Command{ done := make(chan struct{}) ready := make(chan struct{}) + once := sync.Once{} + closeReady := func() { + once.Do(func() { + close(ready) + }) + } go func() { defer close(done) // In case an error happens before ready is called we need to close the ready channel - defer close(ready) + defer closeReady() err := bootstrap.Run( ctx, cfg, - func() { - close(ready) - }, + closeReady, ) if err != nil && !errors.Is(err, context.Canceled) { log.Err(err).Msg("Gateway runtime error")