eth: unsubscribe from subscriptions on error to prevent leaks

This commit is contained in:
CertiK 2025-10-11 16:49:47 +08:00 committed by GitHub
parent 624503cdcf
commit fa92c65545
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 4 additions and 0 deletions

View file

@ -103,6 +103,7 @@ func (api *FilterAPI) timeoutLoop(timeout time.Duration) {
select { select {
case <-ticker.C: case <-ticker.C:
case <-api.events.chainSub.Err(): case <-api.events.chainSub.Err():
api.events.chainSub.Unsubscribe()
return return
} }
api.filtersMu.Lock() api.filtersMu.Lock()
@ -230,6 +231,7 @@ func (api *FilterAPI) NewBlockFilter() rpc.ID {
api.filtersMu.Lock() api.filtersMu.Lock()
delete(api.filters, headerSub.ID) delete(api.filters, headerSub.ID)
api.filtersMu.Unlock() api.filtersMu.Unlock()
headerSub.Unsubscribe()
return return
} }
} }
@ -415,6 +417,7 @@ func (api *FilterAPI) NewFilter(crit FilterCriteria) (rpc.ID, error) {
api.filtersMu.Lock() api.filtersMu.Lock()
delete(api.filters, logsSub.ID) delete(api.filters, logsSub.ID)
api.filtersMu.Unlock() api.filtersMu.Unlock()
logsSub.Unsubscribe()
return return
} }
} }

View file

@ -123,6 +123,7 @@ func NewOracle(backend OracleBackend, params Config, startPrice *big.Int) *Oracl
sub := backend.SubscribeChainHeadEvent(headEvent) sub := backend.SubscribeChainHeadEvent(headEvent)
if sub != nil { // the gasprice testBackend doesn't support subscribing to head events if sub != nil { // the gasprice testBackend doesn't support subscribing to head events
go func() { go func() {
defer sub.Unsubscribe()
var lastHead common.Hash var lastHead common.Hash
for { for {
select { select {