Browse Source

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 years ago
parent
commit
29dca49cb5
1 changed files with 4 additions and 0 deletions
  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) }