Skip to content

Commit 63f8ea7

Browse files
rhansenbuchdag
andauthored
fix: Don't leak signal notification resources (#504)
Co-authored-by: Nicolas Duchon <[email protected]>
1 parent 62cd989 commit 63f8ea7

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

internal/generator/generator.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ func (g *generator) generateFromSignals() {
103103
go func() {
104104
defer g.wg.Done()
105105

106-
sigChan := newSignalChannel()
106+
sigChan, cleanup := newSignalChannel()
107+
defer cleanup()
107108
for {
108109
sig := <-sigChan
109110
log.Printf("Received signal: %s\n", sig)
@@ -148,7 +149,8 @@ func (g *generator) generateAtInterval() {
148149
go func(cfg config.Config) {
149150
defer g.wg.Done()
150151

151-
sigChan := newSignalChannel()
152+
sigChan, cleanup := newSignalChannel()
153+
defer cleanup()
152154
for {
153155
select {
154156
case <-ticker.C:
@@ -217,7 +219,8 @@ func (g *generator) generateFromEvents() {
217219
go func() {
218220
// channel will be closed by go-dockerclient
219221
eventChan := make(chan *docker.APIEvents, 100)
220-
sigChan := newSignalChannel()
222+
sigChan, cleanup := newSignalChannel()
223+
defer cleanup()
221224

222225
for {
223226
watching := false
@@ -469,11 +472,10 @@ func (g *generator) getContainers() ([]*context.RuntimeContainer, error) {
469472

470473
}
471474

472-
func newSignalChannel() <-chan os.Signal {
475+
func newSignalChannel() (<-chan os.Signal, func()) {
473476
sig := make(chan os.Signal, 1)
474477
signal.Notify(sig, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
475-
476-
return sig
478+
return sig, func() { signal.Stop(sig) }
477479
}
478480

479481
func newDebounceChannel(input chan *docker.APIEvents, wait *config.Wait) chan *docker.APIEvents {

0 commit comments

Comments
 (0)