From 8fd624fd5bcecc06e1484d2bb686e91371fbcbef Mon Sep 17 00:00:00 2001 From: dtynn Date: Wed, 11 Dec 2019 20:37:52 +0800 Subject: [PATCH] fix: duplicate unsub calls when client quits --- chain/store/store.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/chain/store/store.go b/chain/store/store.go index b371ec6e1..fc82bcd54 100644 --- a/chain/store/store.go +++ b/chain/store/store.go @@ -155,6 +155,8 @@ func (cs *ChainStore) SubHeadChanges(ctx context.Context) chan []*HeadChange { go func() { defer close(out) + var unsubOnce sync.Once + for { select { case val, ok := <-subch: @@ -170,7 +172,9 @@ func (cs *ChainStore) SubHeadChanges(ctx context.Context) chan []*HeadChange { case <-ctx.Done(): } case <-ctx.Done(): - go cs.bestTips.Unsub(subch) + unsubOnce.Do(func() { + go cs.bestTips.Unsub(subch) + }) } } }()