From 202b4bbe81dc5f5d40df5c779d8f8d20d06e9b70 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 27 Oct 2014 04:40:13 +0000 Subject: gc.c: fix no lazy sweep mode * gc.c (gc_sweep_rest): sweep rest pages regardless of whether lazy sweep is enabled or not. based on the patch by Masahiro Ide at [ruby-dev:48706]. [Bug #10431] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48150 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ gc.c | 9 ++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index d51edc5dc5..6106a23a3e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Oct 27 13:40:11 2014 Nobuyoshi Nakada + + * gc.c (gc_sweep_rest): sweep rest pages regardless of whether + lazy sweep is enabled or not. based on the patch by Masahiro + Ide at [ruby-dev:48706]. [Bug #10431] + Mon Oct 27 11:18:32 2014 Eric Wong * test/ruby/test_process.rb (test_deadlock_by_signal_at_forking): diff --git a/gc.c b/gc.c index a27cc01d03..63eb139445 100644 --- a/gc.c +++ b/gc.c @@ -700,7 +700,8 @@ VALUE *ruby_initial_gc_stress_ptr = &ruby_initial_gc_stress; #else #define is_incremental_marking(objspace) 0 #endif -#define is_lazy_sweeping(heap) (GC_ENABLE_LAZY_SWEEP && (heap)->sweep_pages != 0) +#define has_sweeping_pages(heap) ((heap)->sweep_pages != 0) +#define is_lazy_sweeping(heap) (GC_ENABLE_LAZY_SWEEP && has_sweeping_pages(heap)) #if GC_ENABLE_INCREMENTAL_MARK #define will_be_incremental_marking(objspace) ((objspace)->rgengc.need_major_gc != GPR_FLAG_NONE) #else @@ -3315,10 +3316,8 @@ gc_sweep_rest(rb_objspace_t *objspace) { rb_heap_t *heap = heap_eden; /* lazy sweep only for eden */ - if (is_lazy_sweeping(heap)) { - while (is_lazy_sweeping(heap)) { - gc_sweep_step(objspace, heap); - } + while (has_sweeping_pages(heap)) { + gc_sweep_step(objspace, heap); } } -- cgit v1.2.3