From fc48fda7e5c86b8235c4cc721f35aa71548f84ed Mon Sep 17 00:00:00 2001 From: James Shubin Date: Fri, 1 Feb 2019 03:48:24 -0500 Subject: [PATCH] engine: resources: Fix a possible panic on closed channel I don't know how often it happens, but we should catch it. --- engine/resources/pkg.go | 5 ++++- engine/resources/svc.go | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/engine/resources/pkg.go b/engine/resources/pkg.go index 13eba96c..4b1294af 100644 --- a/engine/resources/pkg.go +++ b/engine/resources/pkg.go @@ -148,7 +148,10 @@ func (obj *PkgRes) Watch() error { send = true obj.init.Dirty() // dirty - case event := <-obj.init.Events: + case event, ok := <-obj.init.Events: + if !ok { + return nil + } if err := obj.init.Read(event); err != nil { return err } diff --git a/engine/resources/svc.go b/engine/resources/svc.go index 8719eb73..9bebbedd 100644 --- a/engine/resources/svc.go +++ b/engine/resources/svc.go @@ -176,7 +176,10 @@ func (obj *SvcRes) Watch() error { // loop so that we can see the changed invalid signal obj.init.Logf("daemon reload") - case event := <-obj.init.Events: + case event, ok := <-obj.init.Events: + if !ok { + return nil + } if err := obj.init.Read(event); err != nil { return err } @@ -222,7 +225,10 @@ func (obj *SvcRes) Watch() error { case err := <-subErrors: return errwrap.Wrapf(err, "unknown %s error", obj) - case event := <-obj.init.Events: + case event, ok := <-obj.init.Events: + if !ok { + return nil + } if err := obj.init.Read(event); err != nil { return err }