diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | gc.c | 7 |
2 files changed, 16 insertions, 0 deletions
@@ -1,3 +1,12 @@ +Tue Aug 9 11:21:08 2011 Narihiro Nakamura <authornari@gmail.com> + + * gc.c (gc_lazy_sweep): if sweep target slots are not found, we + try heap_increment() because it might be able to expand the + heap. [Bug #5127] [ruby-dev:44285] + + * gc.c (gc_clear_mark_on_sweep_slots): if a sweeping was + interrupted, we expand the heap if at all possible. + Tue Aug 9 12:20:33 2011 Naohisa Goto <ngotogenome@gmail.com> * test/fiddle/helper.rb (libc_so, libm_so): Solaris support added. @@ -2172,6 +2172,12 @@ gc_lazy_sweep(rb_objspace_t *objspace) } after_gc_sweep(objspace); } + else { + if (heaps_increment(objspace)) { + during_gc = 0; + return TRUE; + } + } gc_marks(objspace); @@ -2417,6 +2423,7 @@ gc_clear_mark_on_sweep_slots(rb_objspace_t *objspace) RVALUE *p, *pend; if (objspace->heap.sweep_slots) { + while (heaps_increment(objspace)); while (objspace->heap.sweep_slots) { scan = objspace->heap.sweep_slots; p = scan->slot; pend = p + scan->limit; |