fix for DATAS assert during initialization stage #106752
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 are hitting this assert in
gc_thread_function
assert ((n_heaps <= heap_number) || !gc_t_join.joined());
during the init stage. this is because the main thread (that does the GC init) is calling
change_heap_count
which acts like h0's thread while h0's thread can be anywhere before waiting onee_suspend_event
. so we could be in this situation -GCHeap::Init
and creates h0's GC threadgc_heap::change_heap_count
and this will change n_heaps to 1, and after there's another join -when the main thread and all other heaps' GC threads have joined, it changes
gc_t_join.joined_p
to truegc_t_join.joined_p
is true which triggers the assert.so this only happens during the init stage on h0's thread.