Fixes plugin file descriptor leak on plugin discovery

Signed-off-by: Clinton Kitson <clintonskitson@gmail.com>
This commit is contained in:
Clinton Kitson 2016-02-26 08:57:44 -08:00
parent 0f01b21702
commit 799ae78b7e
1 changed files with 14 additions and 4 deletions

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