diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-07-02 12:36:04 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-02 12:36:04 -0400 |
commit | 22def2e2d98fd2ac4f6709bd094ee66bda9c648b (patch) | |
tree | 7e795ae88a3df174bb7d399a115c2178ec4fd93b /libpod/events/logfile.go | |
parent | c131567401bea2867d597d79cce75b99012e64fb (diff) | |
parent | 9e4cf6ca513fa0646f33ade14955e1fc4335e176 (diff) | |
download | podman-22def2e2d98fd2ac4f6709bd094ee66bda9c648b.tar.gz podman-22def2e2d98fd2ac4f6709bd094ee66bda9c648b.tar.bz2 podman-22def2e2d98fd2ac4f6709bd094ee66bda9c648b.zip |
Merge pull request #6838 from mheon/fix_panic_events
Fix `system service` panic from early hangup in events
Diffstat (limited to 'libpod/events/logfile.go')
-rw-r--r-- | libpod/events/logfile.go | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/libpod/events/logfile.go b/libpod/events/logfile.go index 93e6fa3c9..28d0dc07e 100644 --- a/libpod/events/logfile.go +++ b/libpod/events/logfile.go @@ -1,6 +1,7 @@ package events import ( + "context" "fmt" "os" @@ -40,7 +41,7 @@ func (e EventLogFile) Write(ee Event) error { } // Reads from the log file -func (e EventLogFile) Read(options ReadOptions) error { +func (e EventLogFile) Read(ctx context.Context, options ReadOptions) error { defer close(options.EventChannel) eventOptions, err := generateEventOptions(options.Filters, options.Since, options.Until) if err != nil { @@ -50,6 +51,17 @@ func (e EventLogFile) Read(options ReadOptions) error { if err != nil { return err } + funcDone := make(chan bool) + copy := true + go func() { + select { + case <-funcDone: + // Do nothing + case <-ctx.Done(): + copy = false + t.Kill(errors.New("hangup by client")) + } + }() for line := range t.Lines { event, err := newEventFromJSONString(line.Text) if err != nil { @@ -65,10 +77,11 @@ func (e EventLogFile) Read(options ReadOptions) error { for _, filter := range eventOptions { include = include && filter(event) } - if include { + if include && copy { options.EventChannel <- event } } + funcDone <- true return nil } |