...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package rafthttp
16
17 import (
18 "errors"
19 "net/http"
20 )
21
22 func (t *roundTripperBlocker) RoundTrip(req *http.Request) (*http.Response, error) {
23 c := make(chan struct{}, 1)
24 t.mu.Lock()
25 t.cancel[req] = c
26 t.mu.Unlock()
27 ctx := req.Context()
28 select {
29 case <-t.unblockc:
30 return &http.Response{StatusCode: http.StatusNoContent, Body: &nopReadCloser{}}, nil
31 case <-ctx.Done():
32 return nil, errors.New("request canceled")
33 case <-c:
34 return nil, errors.New("request canceled")
35 }
36 }
37
View as plain text