Browse Source

release bridge worker when inactive

Darien Raymond 7 years ago
parent
commit
f3ad8acbe4
2 changed files with 17 additions and 1 deletions
  1. 16 0
      app/reverse/bridge.go
  2. 1 1
      testing/scenarios/reverse_test.go

+ 16 - 0
app/reverse/bridge.go

@@ -42,7 +42,23 @@ func NewBridge(config *BridgeConfig, dispatcher routing.Dispatcher) (*Bridge, er
 	return b, nil
 }
 
+func (b *Bridge) cleanup() {
+	var activeWorkers []*BridgeWorker
+
+	for _, w := range b.workers {
+		if w.IsActive() {
+			activeWorkers = append(activeWorkers, w)
+		}
+	}
+
+	if len(activeWorkers) != len(b.workers) {
+		b.workers = activeWorkers
+	}
+}
+
 func (b *Bridge) monitor() error {
+	b.cleanup()
+
 	var numConnections uint32
 	var numWorker uint32
 

+ 1 - 1
testing/scenarios/reverse_test.go

@@ -182,7 +182,7 @@ func TestReverseProxy(t *testing.T) {
 	defer CloseAllServers(servers)
 
 	var wg sync.WaitGroup
-	wg.Add(10)
+	wg.Add(32)
 	for i := 0; i < 32; i++ {
 		go func() {
 			defer wg.Done()