diff options
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 20 |
1 files changed, 6 insertions, 14 deletions
@@ -284,8 +284,7 @@ rb_newobj() freelist = freelist->as.free.next; return obj; } - if (dont_gc || during_gc || rb_prohibit_interrupt) add_heap(); - else rb_gc(); + rb_gc(); goto retry; } @@ -661,18 +660,6 @@ gc_sweep() int freed = 0; int i, used = heaps_used; - if (ruby_in_compile) { - /* sould not reclaim nodes during compilation */ - for (i = 0; i < used; i++) { - p = heaps[i]; pend = p + HEAP_SLOTS; - while (p < pend) { - if (!(p->as.basic.flags&FL_MARK) && BUILTIN_TYPE(p) == T_NODE) - rb_gc_mark(p); - p++; - } - } - } - freelist = 0; final_list = 0; for (i = 0; i < used; i++) { @@ -913,6 +900,11 @@ rb_gc() # define STACK_END (stack_end) #endif + if (dont_gc || during_gc || rb_prohibit_interrupt || ruby_in_compile) { + add_heap(); + return; + } + malloc_memories = 0; if (during_gc) return; |