Fix memory leak of Coordinates in unit tests #2306
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.
The Coordinates' metric elements can hold shared_ptrs that result in a
cyclic dependency between the Fields and the Coordinates, with the
result that some unit tests have memory leaks.
One place the issue can arise is when multiplying fields by metric
elements with
CHECK > 0
. Then,ASSERT1_FIELDS_COMPATIBLE
checksthat both fields share a
Coordinates
-- but this has the side effectof initialising the
shared_ptr
in the metric elements.This means that when the
Mesh
gets destroyed, thecoords_map
starts to destroy its contents, but because the
Coordinates
metricelements members have references to the
Coordinates
, theCoordinates
incoords_map
doesn't get destroyed. The end result isthat the
Coordinates
gets leaked.The fix here is to use a
weak_ptr
inField
. This only gets areference to the
Coordinates
when needed.