eth/downloader: allow all timers to exit

parent 8f240978
...@@ -197,12 +197,7 @@ func (d *Downloader) runStateSync(s *stateSync) *stateSync { ...@@ -197,12 +197,7 @@ func (d *Downloader) runStateSync(s *stateSync) *stateSync {
} }
// Start a timer to notify the sync loop if the peer stalled. // Start a timer to notify the sync loop if the peer stalled.
req.timer = time.AfterFunc(req.timeout, func() { req.timer = time.AfterFunc(req.timeout, func() {
select { timeout <- req
case timeout <- req:
case <-s.done:
// Prevent leaking of timer goroutines in the unlikely case where a
// timer is fired just before exiting runStateSync.
}
}) })
active[req.peer.id] = req active[req.peer.id] = req
} }
...@@ -214,7 +209,6 @@ func (d *Downloader) runStateSync(s *stateSync) *stateSync { ...@@ -214,7 +209,6 @@ func (d *Downloader) runStateSync(s *stateSync) *stateSync {
// are marked as idle and de facto _are_ idle. // are marked as idle and de facto _are_ idle.
func (d *Downloader) spindownStateSync(active map[string]*stateReq, finished []*stateReq, timeout chan *stateReq, peerDrop chan *peerConnection) { func (d *Downloader) spindownStateSync(active map[string]*stateReq, finished []*stateReq, timeout chan *stateReq, peerDrop chan *peerConnection) {
log.Trace("State sync spinning down", "active", len(active), "finished", len(finished)) log.Trace("State sync spinning down", "active", len(active), "finished", len(finished))
for len(active) > 0 { for len(active) > 0 {
var ( var (
req *stateReq req *stateReq
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment