Feature #10238 ยป 0001-gc.c-use-ruby_sized_xfree-in-more-places.patch
gc.c | ||
---|---|---|
static void free_stack_chunks(mark_stack_t *);
|
||
static void heap_page_free(rb_objspace_t *objspace, struct heap_page *page);
|
||
#ifdef ruby_sized_xfree
|
||
#undef ruby_sized_xfree
|
||
#endif
|
||
void ruby_sized_xfree(void *, size_t);
|
||
#define SIZED_XFREE(p) ruby_sized_xfree(p,sizeof(*p))
|
||
void
|
||
rb_objspace_free(rb_objspace_t *objspace)
|
||
{
|
||
... | ... | |
struct gc_list *list, *next;
|
||
for (list = global_list; list; list = next) {
|
||
next = list->next;
|
||
xfree(list);
|
||
SIZED_XFREE(list);
|
||
}
|
||
}
|
||
if (heap_pages_sorted) {
|
||
... | ... | |
free_const_entry_i(VALUE value, void *data)
|
||
{
|
||
rb_const_entry_t *ce = (rb_const_entry_t *)value;
|
||
xfree(ce);
|
||
SIZED_XFREE(ce);
|
||
return ID_TABLE_CONTINUE;
|
||
}
|
||
... | ... | |
rb_class_remove_from_module_subclasses(obj);
|
||
rb_class_remove_from_super_subclasses(obj);
|
||
if (RANY(obj)->as.klass.ptr)
|
||
xfree(RANY(obj)->as.klass.ptr);
|
||
SIZED_XFREE(RANY(obj)->as.klass.ptr);
|
||
RANY(obj)->as.klass.ptr = NULL;
|
||
break;
|
||
case T_STRING:
|
||
... | ... | |
struct rmatch *rm = RANY(obj)->as.match.rmatch;
|
||
onig_region_free(&rm->regs, 0);
|
||
if (rm->char_offset)
|
||
xfree(rm->char_offset);
|
||
xfree(rm);
|
||
SIZED_XFREE(rm->char_offset);
|
||
SIZED_XFREE(rm);
|
||
}
|
||
break;
|
||
case T_FILE:
|
||
... | ... | |
}
|
||
rb_class_remove_from_module_subclasses(obj);
|
||
rb_class_remove_from_super_subclasses(obj);
|
||
xfree(RANY(obj)->as.klass.ptr);
|
||
SIZED_XFREE(RANY(obj)->as.klass.ptr);
|
||
RANY(obj)->as.klass.ptr = NULL;
|
||
break;
|
||
... | ... | |
run_finalizer(objspace, curr->obj, curr->table);
|
||
st_delete(finalizer_table, &obj, 0);
|
||
list = curr->next;
|
||
xfree(curr);
|
||
SIZED_XFREE(curr);
|
||
}
|
||
}
|
||
... | ... | |
reflist_destruct(struct reflist *refs)
|
||
{
|
||
xfree(refs->list);
|
||
xfree(refs);
|
||
SIZED_XFREE(refs);
|
||
}
|
||
static void
|
||
... | ... | |
if (tmp->varptr == addr) {
|
||
global_list = tmp->next;
|
||
xfree(tmp);
|
||
SIZED_XFREE(tmp);
|
||
return;
|
||
}
|
||
while (tmp->next) {
|
||
... | ... | |
struct gc_list *t = tmp->next;
|
||
tmp->next = tmp->next->next;
|
||
xfree(t);
|
||
SIZED_XFREE(t);
|
||
break;
|
||
}
|
||
tmp = tmp->next;
|
||
... | ... | |
return ruby_sized_xrealloc2(ptr, n, size, 0);
|
||
}
|
||
#ifdef ruby_sized_xfree
|
||
#undef ruby_sized_xfree
|
||
#endif
|
||
void
|
||
ruby_sized_xfree(void *x, size_t size)
|
||
{
|
||
-
|