Make IProfiler race conditon less likely #19967
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.
Interpreter profiling is uses lockless mechanisms that allow for some races to occur. The outcome of these races is some small memory leak.
When adding new profiling info to the IProfiler hashtable, we first determine if an entry with the same pc exists (pc is the key) and if not, we allocate memory for a new entry and then add the entry to the head of the linked list of the corresponding bucket of the IP hashtable. It turns out that allocating memory for a new entry is relatively expensive, and in this window of time another thread could perform the same check, deciding to add a new entry with the same pc.
This commit performs another check just before adding to the linked list of the bucket. This reduces the likelihood of two threads adding entries with the same pc.