@@ -391,11 +391,16 @@ func (h *handler) runEthPeer(peer *eth.Peer, handler eth.Handler) error {
391
391
if h .checkpointHash != (common.Hash {}) {
392
392
// Request the peer's checkpoint header for chain height/weight validation
393
393
resCh := make (chan * eth.Response )
394
- if _ , err := peer .RequestHeadersByNumber (h .checkpointNumber , 1 , 0 , false , resCh ); err != nil {
394
+
395
+ req , err := peer .RequestHeadersByNumber (h .checkpointNumber , 1 , 0 , false , resCh )
396
+ if err != nil {
395
397
return err
396
398
}
397
399
// Start a timer to disconnect if the peer doesn't reply in time
398
400
go func () {
401
+ // Ensure the request gets cancelled in case of error/drop
402
+ defer req .Close ()
403
+
399
404
timeout := time .NewTimer (syncChallengeTimeout )
400
405
defer timeout .Stop ()
401
406
@@ -437,10 +442,15 @@ func (h *handler) runEthPeer(peer *eth.Peer, handler eth.Handler) error {
437
442
// If we have any explicit peer required block hashes, request them
438
443
for number , hash := range h .requiredBlocks {
439
444
resCh := make (chan * eth.Response )
440
- if _ , err := peer .RequestHeadersByNumber (number , 1 , 0 , false , resCh ); err != nil {
445
+
446
+ req , err := peer .RequestHeadersByNumber (number , 1 , 0 , false , resCh )
447
+ if err != nil {
441
448
return err
442
449
}
443
- go func (number uint64 , hash common.Hash ) {
450
+ go func (number uint64 , hash common.Hash , req * eth.Request ) {
451
+ // Ensure the request gets cancelled in case of error/drop
452
+ defer req .Close ()
453
+
444
454
timeout := time .NewTimer (syncChallengeTimeout )
445
455
defer timeout .Stop ()
446
456
@@ -469,7 +479,7 @@ func (h *handler) runEthPeer(peer *eth.Peer, handler eth.Handler) error {
469
479
peer .Log ().Warn ("Required block challenge timed out, dropping" , "addr" , peer .RemoteAddr (), "type" , peer .Name ())
470
480
h .removePeer (peer .ID ())
471
481
}
472
- }(number , hash )
482
+ }(number , hash , req )
473
483
}
474
484
// Handle incoming messages until the connection is torn down
475
485
return handler (peer )
0 commit comments