From 0464cae2d1780c92dd87f259a905d5a00b4795dd Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Fri, 10 Nov 2023 13:30:12 +1000 Subject: [PATCH] op-node: Use resubscriber context when watching head Fixes deadlock during shutdown when unsubscribing from l1 head events. --- op-node/node/node.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/op-node/node/node.go b/op-node/node/node.go index c2bcedb0b8937..a8b538e2e21d2 100644 --- a/op-node/node/node.go +++ b/op-node/node/node.go @@ -171,10 +171,13 @@ func (n *OpNode) initL1(ctx context.Context, cfg *Config) error { // Keep subscribed to the L1 heads, which keeps the L1 maintainer pointing to the best headers to sync n.l1HeadsSub = event.ResubscribeErr(time.Second*10, func(ctx context.Context, err error) (event.Subscription, error) { + if errors.Is(err, context.Canceled) { + return nil, err + } if err != nil { n.log.Warn("resubscribing after failed L1 subscription", "err", err) } - return eth.WatchHeadChanges(n.resourcesCtx, n.l1Source, n.OnNewL1Head) + return eth.WatchHeadChanges(ctx, n.l1Source, n.OnNewL1Head) }) go func() { err, ok := <-n.l1HeadsSub.Err()