Fix: Cleanup nodes in Thread::LinkedList(T)#delete
#15295
Merged
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.
We internally use
Thread::LinkedList(T)
to keep a list of all threads & fibers, so the GC won't collect them and know all the stacks to scan during a GC collection. I noticed that#delete
doesn't cleanup the@previous
and@next
links of the T objects.When we remove the thread or fiber from the list, it means they have terminated and the objects should get collected at some point, so I guess cleanup isn't very important. On the other hand, there isn't much harm to cleanup a couple pointers (quite the opposite).
In fact, while investigating a memory leak with
PerfTools::MemProf.pretty_log_object_graph(io, Fiber)
I noticed a number ofFiber
objects kept references to the same set of other fibers, while with proper cleanup, the graph of objects remained clean & stable, maybe because theFiber
objects disappear much more quickly.