mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 18:32:23 +00:00
eth/downloader : avoid timer leak
This commit is contained in:
parent
2e06fbd409
commit
9a15755f10
1 changed files with 13 additions and 6 deletions
|
|
@ -1019,7 +1019,12 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, head uint64) e
|
|||
pivoting = false // Whether the next request is pivot verification
|
||||
ancestor = from
|
||||
mode = d.getMode()
|
||||
headerCheckTimer = time.NewTimer(fsHeaderContCheck)
|
||||
headerDelayedTimer = time.NewTimer(fsHeaderContCheck)
|
||||
)
|
||||
defer headerCheckTimer.Stop()
|
||||
defer headerDelayedTimer.Stop()
|
||||
|
||||
for {
|
||||
// Pull the next batch of headers, it either:
|
||||
// - Pivot check to see if the chain moved too far
|
||||
|
|
@ -1124,8 +1129,9 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, head uint64) e
|
|||
// Don't abort header fetches while the pivot is downloading
|
||||
if !d.committed.Load() && pivot <= from {
|
||||
p.log.Debug("No headers, waiting for pivot commit")
|
||||
headerCheckTimer.Reset(fsHeaderContCheck)
|
||||
select {
|
||||
case <-time.After(fsHeaderContCheck):
|
||||
case <-headerCheckTimer.C:
|
||||
continue
|
||||
case <-d.cancelCh:
|
||||
return errCanceled
|
||||
|
|
@ -1195,8 +1201,9 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, head uint64) e
|
|||
// skeleton filling
|
||||
if len(headers) == 0 && !progressed {
|
||||
p.log.Trace("All headers delayed, waiting")
|
||||
headerDelayedTimer.Reset(fsHeaderContCheck)
|
||||
select {
|
||||
case <-time.After(fsHeaderContCheck):
|
||||
case <-headerDelayedTimer.C:
|
||||
continue
|
||||
case <-d.cancelCh:
|
||||
return errCanceled
|
||||
|
|
|
|||
Loading…
Reference in a new issue