From 9995f486136010f5ce4024b5199f180ec980504b Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Wed, 1 Mar 2023 04:06:43 -0500 Subject: [PATCH] fix: Don't leak signal notification resources --- internal/generator/generator.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/internal/generator/generator.go b/internal/generator/generator.go index 6f0d08df..bae3a551 100644 --- a/internal/generator/generator.go +++ b/internal/generator/generator.go @@ -103,7 +103,8 @@ func (g *generator) generateFromSignals() { go func() { defer g.wg.Done() - sigChan := newSignalChannel() + sigChan, cleanup := newSignalChannel() + defer cleanup() for { sig := <-sigChan log.Printf("Received signal: %s\n", sig) @@ -148,7 +149,8 @@ func (g *generator) generateAtInterval() { go func(cfg config.Config) { defer g.wg.Done() - sigChan := newSignalChannel() + sigChan, cleanup := newSignalChannel() + defer cleanup() for { select { case <-ticker.C: @@ -217,7 +219,8 @@ func (g *generator) generateFromEvents() { go func() { // channel will be closed by go-dockerclient eventChan := make(chan *docker.APIEvents, 100) - sigChan := newSignalChannel() + sigChan, cleanup := newSignalChannel() + defer cleanup() for { watching := false @@ -469,11 +472,10 @@ func (g *generator) getContainers() ([]*context.RuntimeContainer, error) { } -func newSignalChannel() <-chan os.Signal { +func newSignalChannel() (<-chan os.Signal, func()) { sig := make(chan os.Signal, 1) signal.Notify(sig, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT) - - return sig + return sig, func() { signal.Stop(sig) } } func newDebounceChannel(input chan *docker.APIEvents, wait *config.Wait) chan *docker.APIEvents {