Quellcode durchsuchen

Merge pull request #30408 from cpuguy83/fix_plugin_wait

Fix deadlock on v1 plugin with activate error
Victor Vieux vor 8 Jahren
Ursprung
Commit
113e9f07f4
2 geänderte Dateien mit 8 neuen und 1 gelöschten Zeilen
  1. 7 0
      pkg/plugins/plugin_test.go
  2. 1 1
      pkg/plugins/plugins.go

+ 7 - 0
pkg/plugins/plugin_test.go

@@ -1,6 +1,7 @@
 package plugins
 
 import (
+	"errors"
 	"path/filepath"
 	"runtime"
 	"sync"
@@ -20,6 +21,12 @@ func TestPluginAddHandler(t *testing.T) {
 	testActive(t, p)
 }
 
+func TestPluginWaitBadPlugin(t *testing.T) {
+	p := &Plugin{activateWait: sync.NewCond(&sync.Mutex{})}
+	p.activateErr = errors.New("some junk happened")
+	testActive(t, p)
+}
+
 func testActive(t *testing.T, p *Plugin) {
 	done := make(chan struct{})
 	go func() {

+ 1 - 1
pkg/plugins/plugins.go

@@ -169,7 +169,7 @@ func (p *Plugin) activateWithLock() error {
 
 func (p *Plugin) waitActive() error {
 	p.activateWait.L.Lock()
-	for !p.activated() {
+	for !p.activated() && p.activateErr == nil {
 		p.activateWait.Wait()
 	}
 	p.activateWait.L.Unlock()