瀏覽代碼

rafthttp: always init streamReader before return from newPeer

Or etcd will panic if someone calls `setTerm()`, which uses streamReader
internally, before streamReader is inited.
Yicheng Qin 10 年之前
父節點
當前提交
7ff1fa36f2
共有 1 個文件被更改,包括 2 次插入2 次删除
  1. 2 2
      rafthttp/peer.go

+ 2 - 2
rafthttp/peer.go

@@ -143,10 +143,10 @@ func startPeer(tr http.RoundTripper, urls types.URLs, local, to, cid types.ID, r
 		}
 		}
 	}()
 	}()
 
 
+	p.msgAppReader = startStreamReader(tr, picker, streamTypeMsgAppV2, local, to, cid, status, p.recvc, p.propc, errorc)
+	reader := startStreamReader(tr, picker, streamTypeMessage, local, to, cid, status, p.recvc, p.propc, errorc)
 	go func() {
 	go func() {
 		var paused bool
 		var paused bool
-		p.msgAppReader = startStreamReader(tr, picker, streamTypeMsgAppV2, local, to, cid, status, p.recvc, p.propc, errorc)
-		reader := startStreamReader(tr, picker, streamTypeMessage, local, to, cid, status, p.recvc, p.propc, errorc)
 		for {
 		for {
 			select {
 			select {
 			case m := <-p.sendc:
 			case m := <-p.sendc: