recwatch: Close the ConfigWatch properly

This improves the shutdown process so that there is no change of
blocking if the sender runs close without having emptied the channel.
This commit is contained in:
James Shubin
2017-02-22 17:37:07 -05:00
parent 49594b8435
commit e5bb8d7992

View File

@@ -59,15 +59,23 @@ func (obj *ConfigWatcher) Add(file ...string) {
ch := obj.ConfigWatch(file[0])
for {
select {
case e := <-ch:
case e, ok := <-ch:
if !ok { // channel closed
return
}
if e != nil {
obj.errorchan <- e
return
}
obj.ch <- file[0]
continue
select {
case obj.ch <- file[0]: // send on channel
case <-obj.closechan:
return
return // never mind, close early!
}
continue
// not needed, closes via ConfigWatch() chan close
//case <-obj.closechan:
// return
}
}
}()
@@ -126,7 +134,12 @@ func (obj *ConfigWatcher) ConfigWatch(file string) chan error {
close(ch)
return
}
ch <- nil // send event!
select {
case ch <- nil: // send event!
case <-obj.closechan:
close(ch)
return
}
}
}
//close(ch)