Fixes plugin file descriptor leak on plugin discovery

Signed-off-by: Clinton Kitson <clintonskitson@gmail.com>
Upstream-commit: 799ae78b7efa9ffb8e142a0a211325cca59987be
Component: engine
This commit is contained in:
Clinton Kitson
2016-02-26 19:43:50 -08:00
parent 1deeda21d4
commit fac52dba98
+14 -4
View File
@@ -199,17 +199,27 @@ func GetAll(imp string) ([]*Plugin, error) {
err error
}
chPl := make(chan plLoad, len(pluginNames))
chPl := make(chan *plLoad, len(pluginNames))
var wg sync.WaitGroup
for _, name := range pluginNames {
if pl, ok := storage.plugins[name]; ok {
chPl <- &plLoad{pl, nil}
continue
}
wg.Add(1)
go func(name string) {
defer wg.Done()
pl, err := loadWithRetry(name, false)
chPl <- plLoad{pl, err}
chPl <- &plLoad{pl, err}
}(name)
}
wg.Wait()
close(chPl)
var out []*Plugin
for i := 0; i < len(pluginNames); i++ {
pl := <-chPl
for pl := range chPl {
if pl.err != nil {
logrus.Error(err)
continue