Browse Source

Merge pull request #20686 from clintonskitson/bugfix/plugin_desc_leak

Fix plugin file descriptor leaks
David Calavera 9 years ago
parent
commit
29b2b0c22b
1 changed files with 14 additions and 4 deletions
  1. 14 4
      pkg/plugins/plugins.go

+ 14 - 4
pkg/plugins/plugins.go

@@ -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