@@ -391,11 +391,16 @@ func (h *handler) runEthPeer(peer *eth.Peer, handler eth.Handler) error {
391391 if h .checkpointHash != (common.Hash {}) {
392392 // Request the peer's checkpoint header for chain height/weight validation
393393 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 {
395397 return err
396398 }
397399 // Start a timer to disconnect if the peer doesn't reply in time
398400 go func () {
401+ // Ensure the request gets cancelled in case of error/drop
402+ defer req .Close ()
403+
399404 timeout := time .NewTimer (syncChallengeTimeout )
400405 defer timeout .Stop ()
401406
@@ -437,10 +442,15 @@ func (h *handler) runEthPeer(peer *eth.Peer, handler eth.Handler) error {
437442 // If we have any explicit peer required block hashes, request them
438443 for number , hash := range h .requiredBlocks {
439444 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 {
441448 return err
442449 }
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+
444454 timeout := time .NewTimer (syncChallengeTimeout )
445455 defer timeout .Stop ()
446456
@@ -469,7 +479,7 @@ func (h *handler) runEthPeer(peer *eth.Peer, handler eth.Handler) error {
469479 peer .Log ().Warn ("Required block challenge timed out, dropping" , "addr" , peer .RemoteAddr (), "type" , peer .Name ())
470480 h .removePeer (peer .ID ())
471481 }
472- }(number , hash )
482+ }(number , hash , req )
473483 }
474484 // Handle incoming messages until the connection is torn down
475485 return handler (peer )
0 commit comments