From fa92c65545f087ac351dc9d5a6d0541d853c5449 Mon Sep 17 00:00:00 2001 From: CertiK <138698582+CertiK-Geth@users.noreply.github.com> Date: Sat, 11 Oct 2025 16:49:47 +0800 Subject: [PATCH] eth: unsubscribe from subscriptions on error to prevent leaks --- eth/filters/api.go | 3 +++ eth/gasprice/gasprice.go | 1 + 2 files changed, 4 insertions(+) diff --git a/eth/filters/api.go b/eth/filters/api.go index a3ed00f33b..de70e5e310 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -103,6 +103,7 @@ func (api *FilterAPI) timeoutLoop(timeout time.Duration) { select { case <-ticker.C: case <-api.events.chainSub.Err(): + api.events.chainSub.Unsubscribe() return } api.filtersMu.Lock() @@ -230,6 +231,7 @@ func (api *FilterAPI) NewBlockFilter() rpc.ID { api.filtersMu.Lock() delete(api.filters, headerSub.ID) api.filtersMu.Unlock() + headerSub.Unsubscribe() return } } @@ -415,6 +417,7 @@ func (api *FilterAPI) NewFilter(crit FilterCriteria) (rpc.ID, error) { api.filtersMu.Lock() delete(api.filters, logsSub.ID) api.filtersMu.Unlock() + logsSub.Unsubscribe() return } } diff --git a/eth/gasprice/gasprice.go b/eth/gasprice/gasprice.go index 4fd3df7428..fb61cd3906 100644 --- a/eth/gasprice/gasprice.go +++ b/eth/gasprice/gasprice.go @@ -123,6 +123,7 @@ func NewOracle(backend OracleBackend, params Config, startPrice *big.Int) *Oracl sub := backend.SubscribeChainHeadEvent(headEvent) if sub != nil { // the gasprice testBackend doesn't support subscribing to head events go func() { + defer sub.Unsubscribe() var lastHead common.Hash for { select {