You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The following was the call for the assertion failure assert (n < gc_heap::n_heaps) for the Linux DATAS run for the finalization scenario with STRESS_DYNAMIC_HEAP_COUNT enabled using the Reliability Framework.
But looking at “n” and “gc_heap::n_heaps” we see that n = 9 and gc_heap::n_heaps = 14, which doesn’t explain why we fired the assert. But looking deeper in the caller: wait_for_gc_done:
while (gc_heap::gc_started)
{
#ifdef MULTIPLE_HEAPS
wait_heap = GCHeap::GetHeap(heap_select::select_heap(NULL))->pGenGCHeap;
dprintf(2, ("waiting for the gc_done_event on heap %d", wait_heap->heap_number));
#endif// MULTIPLE_HEAPS
#ifdef _PREFAST_
PREFIX_ASSUME(wait_heap != NULL);
#endif// _PREFAST_
dwWaitResult = wait_heap->gc_done_event.Wait(timeOut, FALSE);
}
We are trying to access the HeapNumber while changing the heap count:
e.g., thread 8 (14 stacks indicating these each for n = 14 heaps currently in use)
Description
The following was the call for the assertion failure
assert (n < gc_heap::n_heaps)
for the Linux DATAS run for the finalization scenario with STRESS_DYNAMIC_HEAP_COUNT enabled using the Reliability Framework.E.g., for : dump_11995:
Initial Investigation
The stack seems to signify the following assertion in GetHeap:
But looking at “n” and “gc_heap::n_heaps” we see that n = 9 and gc_heap::n_heaps = 14, which doesn’t explain why we fired the assert. But looking deeper in the caller: wait_for_gc_done:
We are trying to access the HeapNumber while changing the heap count:
e.g., thread 8 (14 stacks indicating these each for n = 14 heaps currently in use)
Implying that we could be in a race condition during the time we change the heap count and when we want to get the heap to wait on.
The text was updated successfully, but these errors were encountered: