void prof_call_infos_mark(prof_call_infos_t *call_infos) { prof_call_info_t **call_info; if (call_infos->object) rb_gc_mark(call_infos->object); for(call_info=call_infos->start; call_info<call_infos->ptr; call_info++) { prof_call_info_mark(*call_info); } }
static void prof_call_info_mark(prof_call_info_t *call_info) { { VALUE target = call_info->target->object; if (NIL_P(target)) prof_method_mark(call_info->target); else rb_gc_mark(target); } rb_gc_mark(call_info->children); if (call_info->parent) { VALUE parent = call_info->parent->object; if (NIL_P(parent)) { prof_call_info_mark(call_info->parent); } else { rb_gc_mark(parent); } } }