diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2022-07-21 14:55:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-21 14:55:31 +0200 |
commit | 53dfc23e429cd53124a54eb3f3066a67aa5ead4c (patch) | |
tree | c45f7f29de84d4bf442e607deb6520ce3e878008 /libpod/container_log.go | |
parent | 5abb38238d56f87e6fe277939b0fcccb78bcda42 (diff) | |
parent | 4e72aa58604f9384c3d2913b16baa41f00d0a9e1 (diff) | |
download | podman-53dfc23e429cd53124a54eb3f3066a67aa5ead4c.tar.gz podman-53dfc23e429cd53124a54eb3f3066a67aa5ead4c.tar.bz2 podman-53dfc23e429cd53124a54eb3f3066a67aa5ead4c.zip |
Merge pull request #14984 from Luap99/logs
fix goroutine leaks in events and logs backend
Diffstat (limited to 'libpod/container_log.go')
-rw-r--r-- | libpod/container_log.go | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libpod/container_log.go b/libpod/container_log.go index a9e0fe065..c49b54eb1 100644 --- a/libpod/container_log.go +++ b/libpod/container_log.go @@ -10,6 +10,7 @@ import ( "github.com/containers/podman/v4/libpod/define" "github.com/containers/podman/v4/libpod/events" "github.com/containers/podman/v4/libpod/logs" + "github.com/nxadm/tail" "github.com/nxadm/tail/watch" "github.com/sirupsen/logrus" ) @@ -74,14 +75,19 @@ func (c *Container) readFromLogFile(ctx context.Context, options *logs.LogOption go func() { defer options.WaitGroup.Done() - - for line := range t.Lines { + var line *tail.Line + var ok bool + for { select { case <-ctx.Done(): // the consumer has cancelled + t.Kill(errors.New("hangup by client")) return - default: - // fallthrough + case line, ok = <-t.Lines: + if !ok { + // channel was closed + return + } } nll, err := logs.NewLogLine(line.Text) if err != nil { |