From d39b68bfd86d800dd5c7565ef36610ecff42c595 Mon Sep 17 00:00:00 2001 From: yusing Date: Sun, 22 Sep 2024 04:11:02 +0800 Subject: [PATCH] fixed possible resource leak --- src/watcher/docker_watcher.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/watcher/docker_watcher.go b/src/watcher/docker_watcher.go index a61c095..942e46f 100644 --- a/src/watcher/docker_watcher.go +++ b/src/watcher/docker_watcher.go @@ -33,6 +33,8 @@ var ( DockerFilterUnpause = filters.Arg("event", string(docker_events.ActionUnPause)) NewDockerFilter = filters.NewArgs + + dockerWatcherRetryInterval = 3 * time.Second ) func DockerrFilterContainerName(name string) filters.KeyValuePair { @@ -56,6 +58,8 @@ func (w DockerWatcher) EventsWithOptions(ctx context.Context, options DockerList errCh := make(chan E.NestedError) started := make(chan struct{}) + eventsCtx, eventsCancel := context.WithCancel(ctx) + go func() { defer close(eventCh) defer close(errCh) @@ -80,12 +84,12 @@ func (w DockerWatcher) EventsWithOptions(ctx context.Context, options DockerList case <-ctx.Done(): return default: - time.Sleep(3 * time.Second) + time.Sleep(dockerWatcherRetryInterval) } } } - cEventCh, cErrCh := w.client.Events(ctx, options) + cEventCh, cErrCh := w.client.Events(eventsCtx, options) started <- struct{}{} for { @@ -118,10 +122,10 @@ func (w DockerWatcher) EventsWithOptions(ctx context.Context, options DockerList case <-ctx.Done(): return default: - if D.IsErrConnectionFailed(err) { - time.Sleep(100 * time.Millisecond) - cEventCh, cErrCh = w.client.Events(ctx, options) - } + eventsCancel() + time.Sleep(dockerWatcherRetryInterval) + eventsCtx, eventsCancel = context.WithCancel(ctx) + cEventCh, cErrCh = w.client.Events(ctx, options) } } }