mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 04:36:42 +00:00
eth/txtracker: make Stop safe before Start and idempotent
This commit is contained in:
parent
00c5d3214a
commit
ccd5fced83
1 changed files with 10 additions and 5 deletions
|
|
@ -80,9 +80,10 @@ type Tracker struct {
|
|||
headCh chan core.ChainHeadEvent
|
||||
sub event.Subscription
|
||||
|
||||
quit chan struct{}
|
||||
step chan struct{} // test sync: sent after each event is processed
|
||||
wg sync.WaitGroup
|
||||
quit chan struct{}
|
||||
stopOnce sync.Once
|
||||
step chan struct{} // test sync: sent after each event is processed
|
||||
wg sync.WaitGroup
|
||||
}
|
||||
|
||||
// New creates a new tracker.
|
||||
|
|
@ -118,8 +119,12 @@ func (t *Tracker) NotifyPeerDrop(peer string) {
|
|||
|
||||
// Stop shuts down the tracker.
|
||||
func (t *Tracker) Stop() {
|
||||
t.sub.Unsubscribe()
|
||||
close(t.quit)
|
||||
t.stopOnce.Do(func() {
|
||||
if t.sub != nil {
|
||||
t.sub.Unsubscribe()
|
||||
}
|
||||
close(t.quit)
|
||||
})
|
||||
t.wg.Wait()
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue