core/state/snapshot: race resulting in generate() goroutine leak
#33230
+4
−3
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.
If
snapshot.diskLayer.generate()completes early enough it set itsgenMarkerfield toniland races with thediskLayer.stopGeneration()method, possibly leaking thegenerate()goroutine as it never receives on thegenAbortchannel. In practice this only means thatDisable()would leak the goroutine, and that any test withgoleak.Verify*()needs to ignore it. A cursory read suggests thatJournal()will successfully release resources.I've so far only demonstrated this in the test but not fixed it. Before doing so, I wanted to see if anyone thought it was worth it. For me it's only a minor annoyance in always having to ignore the method when checking for my own leaks.