util+plugins: Fix potential memory leak with explicit timer cancellation. #7089
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.
What changed?
This commit adds a utility for explicitly creating cancelable timers, to avoid possible memory leaks caused by some
time.After
timers inselect
statements never being GC'd properly. This issue is fixed in Go 1.23, but since we're still on Go 1.21, this will resolve the possibility of leaks in the mean time.The patch fixes every instance in OPA of
<-time.After(...)
that we have, so this should fix the issue until OPA eventually upgrades to Go 1.23 (which changes the behavior oftime.After
).Note: One of these instances occurs in
topdown/http.go
, so after this fix is integrated into an OPA release, we may want to poke some OPA memory leak reporters again, especially if they were usinghttp.send
extensively in their policies.Additional Resources
time.After
issue