瀏覽代碼

rafthttp: wait 1ms before enabling cancel

CancelRequest only effects on in-flight request, so we need to wait
for Do(request) called before enabling cancel.
Yicheng Qin 10 年之前
父節點
當前提交
29dca49cb5
共有 1 個文件被更改,包括 4 次插入0 次删除
  1. 4 0
      rafthttp/pipeline.go

+ 4 - 0
rafthttp/pipeline.go

@@ -153,6 +153,7 @@ func (p *pipeline) post(data []byte) (err error) {
 		select {
 		case <-done:
 		case <-p.stopc:
+			waitSchedule()
 			stopped = true
 			if cancel, ok := p.tr.(canceler); ok {
 				cancel.CancelRequest(req)
@@ -199,3 +200,6 @@ func (p *pipeline) post(data []byte) (err error) {
 		return fmt.Errorf("unexpected http status %s while posting to %q", http.StatusText(resp.StatusCode), req.URL.String())
 	}
 }
+
+// waitSchedule waits other goroutines to be scheduled for a while
+func waitSchedule() { time.Sleep(time.Millisecond) }