Skip to content

Commit e844eef

Browse files
authored
Merge pull request #22 from tailingchen/fix-subscribe-newhead-waitgroup
multiclient: set subscribe wait group for each subscription
2 parents d0b1cd8 + fa7c0f5 commit e844eef

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

multiclient/client.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ var (
4444
)
4545

4646
type Client struct {
47-
rpcClientMap *Map
48-
subscribeNewHeadWg sync.WaitGroup
47+
rpcClientMap *Map
4948
}
5049

5150
func New(ctx context.Context, opts ...Option) (*Client, error) {
@@ -611,23 +610,25 @@ func (mc *Client) SubscribeNewHead(ctx context.Context, ch chan<- *Header) (ethe
611610
return nil, ErrNoEthClient
612611
}
613612

613+
var subscribeNewHeadWg sync.WaitGroup
614+
614615
cctx, cancel := context.WithCancel(ctx)
615616
for url := range clientsMap {
616-
go mc.subscribeNewHead(cctx, url, ch)
617+
subscribeNewHeadWg.Add(1)
618+
go mc.subscribeNewHead(cctx, &subscribeNewHeadWg, url, ch)
617619
}
618620

619621
// TODO: handle new clients comes
620622
return event.NewSubscription(func(unsub <-chan struct{}) error {
621623
<-unsub
622624
cancel()
623-
mc.subscribeNewHeadWg.Wait()
625+
subscribeNewHeadWg.Wait()
624626
return nil
625627
}), nil
626628
}
627629

628-
func (mc *Client) subscribeNewHead(ctx context.Context, url string, ch chan<- *Header) error {
629-
mc.subscribeNewHeadWg.Add(1)
630-
defer mc.subscribeNewHeadWg.Done()
630+
func (mc *Client) subscribeNewHead(ctx context.Context, wg *sync.WaitGroup, url string, ch chan<- *Header) error {
631+
defer wg.Done()
631632

632633
for {
633634
rc := mc.rpcClientMap.Get(url)

0 commit comments

Comments
 (0)