fix: duplicate unsub calls when client quits

This commit is contained in:
dtynn 2019-12-11 20:37:52 +08:00
parent bb13438e1f
commit 8fd624fd5b

View File

@ -155,6 +155,8 @@ func (cs *ChainStore) SubHeadChanges(ctx context.Context) chan []*HeadChange {
go func() { go func() {
defer close(out) defer close(out)
var unsubOnce sync.Once
for { for {
select { select {
case val, ok := <-subch: case val, ok := <-subch:
@ -170,7 +172,9 @@ func (cs *ChainStore) SubHeadChanges(ctx context.Context) chan []*HeadChange {
case <-ctx.Done(): case <-ctx.Done():
} }
case <-ctx.Done(): case <-ctx.Done():
go cs.bestTips.Unsub(subch) unsubOnce.Do(func() {
go cs.bestTips.Unsub(subch)
})
} }
} }
}() }()