summaryrefslogtreecommitdiff
path: root/libpod/events/logfile.go
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-07-02 12:36:04 -0400
committerGitHub <noreply@github.com>2020-07-02 12:36:04 -0400
commit22def2e2d98fd2ac4f6709bd094ee66bda9c648b (patch)
tree7e795ae88a3df174bb7d399a115c2178ec4fd93b /libpod/events/logfile.go
parentc131567401bea2867d597d79cce75b99012e64fb (diff)
parent9e4cf6ca513fa0646f33ade14955e1fc4335e176 (diff)
downloadpodman-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.go17
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
}