Skip to content

Commit

Permalink
Extract mono_sgen_clear_range.
Browse files Browse the repository at this point in the history
  • Loading branch information
kumpera committed Mar 20, 2012
1 parent 8b28952 commit a6e9332
Showing 1 changed file with 22 additions and 13 deletions.
35 changes: 22 additions & 13 deletions mono/metadata/sgen-nursery-allocator.c
Expand Up @@ -464,6 +464,26 @@ mono_sgen_clear_nursery_fragments (void)
}
}

static void
mono_sgen_clear_range (char *start, char *end)
{
MonoArray *o;
size_t size = end - start;

if (size < sizeof (MonoArray)) {
memset (start, 0, size);
return;
}

o = (MonoArray*)start;
o->obj.vtable = mono_sgen_get_array_fill_vtable ();
/* Mark this as not a real object */
o->obj.synchronisation = GINT_TO_POINTER (-1);
o->bounds = NULL;
o->max_length = size - sizeof (MonoArray);
g_assert (start + mono_sgen_safe_object_get_size ((MonoObject*)o) == end);
}

void
mono_sgen_nursery_allocator_prepare_for_pinning (void)
{
Expand All @@ -478,19 +498,8 @@ mono_sgen_nursery_allocator_prepare_for_pinning (void)
* - the start of each fragment (the last_obj + last_obj case)
* The third encompasses the first two, since scan_locations [i] can't point inside a nursery fragment.
*/
for (frag = unmask (nursery_fragments); frag; frag = unmask (frag->next)) {
MonoArray *o;

g_assert (frag->fragment_end - frag->fragment_next >= sizeof (MonoArray));
o = (MonoArray*)frag->fragment_next;
memset (o, 0, sizeof (MonoArray));
g_assert (mono_sgen_get_array_fill_vtable ());
o->obj.vtable = mono_sgen_get_array_fill_vtable ();
/* Mark this as not a real object */
o->obj.synchronisation = GINT_TO_POINTER (-1);
o->max_length = (frag->fragment_end - frag->fragment_next) - sizeof (MonoArray);
g_assert (frag->fragment_next + mono_sgen_safe_object_get_size ((MonoObject*)o) == frag->fragment_end);
}
for (frag = unmask (nursery_fragments); frag; frag = unmask (frag->next))
mono_sgen_clear_range (frag->fragment_next, frag->fragment_end);
}

static mword fragment_total = 0;
Expand Down

0 comments on commit a6e9332

Please sign in to comment.