Browse Source

Merge pull request #29895 from cpuguy83/cherry_pick_29893

[1.13.x] Fix race accessing plugin storage map
Sebastiaan van Stijn 8 years ago
parent
commit
1dded0dee4
1 changed files with 8 additions and 1 deletions
  1. 8 1
      pkg/plugins/plugins.go

+ 8 - 1
pkg/plugins/plugins.go

@@ -221,6 +221,10 @@ func loadWithRetry(name string, retry bool) (*Plugin, error) {
 		}
 
 		storage.Lock()
+		if pl, exists := storage.plugins[name]; exists {
+			storage.Unlock()
+			return pl, pl.activate()
+		}
 		storage.plugins[name] = pl
 		storage.Unlock()
 
@@ -298,7 +302,10 @@ func GetAll(imp string) ([]*Plugin, error) {
 	chPl := make(chan *plLoad, len(pluginNames))
 	var wg sync.WaitGroup
 	for _, name := range pluginNames {
-		if pl, ok := storage.plugins[name]; ok {
+		storage.Lock()
+		pl, ok := storage.plugins[name]
+		storage.Unlock()
+		if ok {
 			chPl <- &plLoad{pl, nil}
 			continue
 		}