Skip to content

Commit b3503e0

Browse files
committed
respect contexts while reading messages in dht
License: MIT Signed-off-by: Jeromy <[email protected]>
1 parent 0e81124 commit b3503e0

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

routing/dht/dht_net.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dht
22

33
import (
4+
"fmt"
45
"sync"
56
"time"
67

@@ -214,7 +215,7 @@ func (ms *messageSender) SendRequest(ctx context.Context, pmes *pb.Message) (*pb
214215
log.Event(ctx, "dhtSentMessage", ms.dht.self, ms.p, pmes)
215216

216217
mes := new(pb.Message)
217-
if err := ms.r.ReadMsg(mes); err != nil {
218+
if err := ms.ctxReadMsg(ctx, mes); err != nil {
218219
ms.s.Close()
219220
ms.s = nil
220221
return nil, err
@@ -227,3 +228,23 @@ func (ms *messageSender) SendRequest(ctx context.Context, pmes *pb.Message) (*pb
227228

228229
return mes, nil
229230
}
231+
232+
func (ms *messageSender) ctxReadMsg(ctx context.Context, mes *pb.Message) error {
233+
t := time.NewTimer(time.Second * 30)
234+
defer t.Stop()
235+
236+
errc := make(chan error, 1)
237+
go func() {
238+
errc <- ms.r.ReadMsg(mes)
239+
}()
240+
241+
select {
242+
case err := <-errc:
243+
return err
244+
case <-ctx.Done():
245+
return ctx.Err()
246+
case <-t.C:
247+
log.Warning("dht context read timeout")
248+
return fmt.Errorf("reading message timed out")
249+
}
250+
}

0 commit comments

Comments
 (0)