rpc, eth/filters: use non-blocking timer drain pattern #31141
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Using a direct channel receive after
Stop()
may block in edge cases. A safer approach is to useselect
with a default case for timer cleanup.PS: I noticed other instances in the code where
Reset
is used without draining the timer channel viaStop()
. While this is fixed in Go 1.23+, it could cause undefined behavior in earlier versions. Would the team be open to addressing this for compatibility with pre-1.23 Go versions?I’d be happy to fix this in this PR if needed.Ref: golang/go#37196