#ifdef FEATURE_BASICFREEZE
// end must be page aligned addresses.
-void gc_heap::clear_mark_array (uint8_t* from, uint8_t* end, BOOL read_only/*=FALSE*/)
+void gc_heap::clear_mark_array (uint8_t* from, uint8_t* end)
{
assert (gc_can_use_concurrent);
-
- if (!read_only)
- {
- assert (from == align_on_mark_word (from));
- }
assert (end == align_on_mark_word (end));
uint8_t* current_lowest_address = background_saved_lowest_address;
#ifdef BACKGROUND_GC
if (gc_can_use_concurrent)
{
- clear_mark_array (align_lower_mark_word (max (heap_segment_mem (seg), lowest_address)),
- align_on_card_word (min (heap_segment_allocated (seg), highest_address)));
+ seg_clear_mark_array_bits_soh (seg);
}
#endif //BACKGROUND_GC
uint8_t* range_end = 0;
if (bgc_mark_array_range (seg, FALSE, &range_beg, &range_end))
{
- clear_mark_array (range_beg, align_on_mark_word (range_end), TRUE);
+ clear_mark_array (range_beg, align_on_mark_word (range_end));
}
}
#ifdef FEATURE_BASICFREEZE
PER_HEAP_METHOD void seg_set_mark_array_bits_soh (heap_segment* seg);
- PER_HEAP_METHOD void clear_mark_array (uint8_t* from, uint8_t* end, BOOL read_only=FALSE);
+ PER_HEAP_METHOD void clear_mark_array (uint8_t* from, uint8_t* end);
PER_HEAP_METHOD void seg_clear_mark_array_bits_soh (heap_segment* seg);
#endif // FEATURE_BASICFREEZE
{
private static unsafe int Main()
{
+ // Regression testing for dotnet/runtime #83027
+ Node[] firstArray = new Node[30000000];
+ for (int index = 0; index < firstArray.Length; index++)
+ {
+ firstArray[index] = new Node();
+ }
+
IntPtr methodTable = typeof(Node).TypeHandle.Value;
FrozenSegmentBuilder frozenSegmentBuilder = new FrozenSegmentBuilder(1000);