瀏覽代碼

grpcproxy: fix deadlock on watch broadcasts stop

Holding the WatchBroadcasts lock and waiting on donec was
causing a deadlock with the coalesce loop. Was causing
TestV3WatchSyncCancel to hang.
Anthony Romano 9 年之前
父節點
當前提交
7618fdd1d6
共有 1 個文件被更改,包括 1 次插入2 次删除
  1. 1 2
      proxy/grpcproxy/watch_broadcasts.go

+ 1 - 2
proxy/grpcproxy/watch_broadcasts.go

@@ -116,13 +116,12 @@ func (wbs *watchBroadcasts) empty() bool { return len(wbs.bcasts) == 0 }
 
 
 func (wbs *watchBroadcasts) stop() {
 func (wbs *watchBroadcasts) stop() {
 	wbs.mu.Lock()
 	wbs.mu.Lock()
-	defer wbs.mu.Unlock()
-
 	for wb := range wbs.bcasts {
 	for wb := range wbs.bcasts {
 		wb.stop()
 		wb.stop()
 	}
 	}
 	wbs.bcasts = nil
 	wbs.bcasts = nil
 	close(wbs.updatec)
 	close(wbs.updatec)
+	wbs.mu.Unlock()
 	<-wbs.donec
 	<-wbs.donec
 }
 }