From e14b14b88c8e415f7f736eef9922cc6711d248d1 Mon Sep 17 00:00:00 2001 From: James Shubin Date: Sun, 16 Dec 2018 08:17:23 -0500 Subject: [PATCH] engine: resources: svc: Add symmetric closing This improves some of the closing in the svc resource. This still needs lots of improvements, and it's sort of terrible because it was some very early code written. --- engine/resources/svc.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/engine/resources/svc.go b/engine/resources/svc.go index e0e90c89..d01006f2 100644 --- a/engine/resources/svc.go +++ b/engine/resources/svc.go @@ -69,7 +69,6 @@ func (obj *SvcRes) Validate() error { // Init runs some startup code for this resource. func (obj *SvcRes) Init(init *engine.Init) error { obj.init = init // save for later - return nil } @@ -108,12 +107,15 @@ func (obj *SvcRes) Watch() error { if err != nil { return errwrap.Wrapf(err, "failed to connect to bus") } + defer bus.Close() // XXX: will this detect new units? bus.BusObject().Call("org.freedesktop.DBus.AddMatch", 0, "type='signal',interface='org.freedesktop.systemd1.Manager',member='Reloading'") buschan := make(chan *dbus.Signal, 10) + defer close(buschan) // NOTE: closing a chan that contains a value is ok bus.Signal(buschan) + defer bus.RemoveSignal(buschan) // not needed here, but nice for symmetry // notify engine that we're running if err := obj.init.Running(); err != nil { @@ -124,8 +126,12 @@ func (obj *SvcRes) Watch() error { var send = false // send event? var invalid = false // does the svc exist or not? var previous bool // previous invalid value - set := conn.NewSubscriptionSet() // no error should be returned + + // TODO: do we first need to call conn.Subscribe() ? + set := conn.NewSubscriptionSet() // no error should be returned subChannel, subErrors := set.Subscribe() + //defer close(subChannel) // cannot close receive-only channel + //defer close(subErrors) // cannot close receive-only channel var activeSet = false for {