From aab12ec054ed6af47bc67abd07076a64a10222b6 Mon Sep 17 00:00:00 2001 From: ko1 Date: Wed, 24 Oct 2012 01:39:45 +0000 Subject: * gc.c (garbage_collect, gc_marks): move the location of clear and restore rb_objspace_t::mark_func_data from garbage_collect() to gc_marks(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37309 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ gc.c | 13 ++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4cb7a38ff5..99e2cb76e0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Wed Oct 24 10:33:09 2012 Koichi Sasada + + * gc.c (garbage_collect, gc_marks): move the location of + clear and restore rb_objspace_t::mark_func_data + from garbage_collect() to gc_marks(). + Wed Oct 24 10:17:45 2012 Koichi Sasada * ext/objspace/objspace.c (Init_objspace): add a new method diff --git a/gc.c b/gc.c index 29b9cc7bde..e7a851997e 100644 --- a/gc.c +++ b/gc.c @@ -2914,6 +2914,10 @@ gc_marks(rb_objspace_t *objspace) { struct gc_list *list; rb_thread_t *th = GET_THREAD(); + struct mark_func_data_struct *prev_mark_func_data; + + prev_mark_func_data = objspace->mark_func_data; + objspace->mark_func_data = 0; gc_prof_mark_timer_start(objspace); @@ -2951,6 +2955,8 @@ gc_marks(rb_objspace_t *objspace) gc_mark_stacked_objects(objspace); gc_prof_mark_timer_stop(objspace); + + objspace->mark_func_data = prev_mark_func_data; } /* GC */ @@ -3020,8 +3026,6 @@ rb_gc_unregister_address(VALUE *addr) static int garbage_collect(rb_objspace_t *objspace) { - struct mark_func_data_struct *prev_mark_func_data; - if (GC_NOTIFY) printf("start garbage_collect()\n"); if (!heaps) { @@ -3033,9 +3037,6 @@ garbage_collect(rb_objspace_t *objspace) gc_prof_timer_start(objspace); - prev_mark_func_data = objspace->mark_func_data; - objspace->mark_func_data = 0; - rest_sweep(objspace); during_gc++; @@ -3045,8 +3046,6 @@ garbage_collect(rb_objspace_t *objspace) gc_sweep(objspace); gc_prof_sweep_timer_stop(objspace); - objspace->mark_func_data = prev_mark_func_data; - gc_prof_timer_stop(objspace, Qtrue); if (GC_NOTIFY) printf("end garbage_collect()\n"); return TRUE; -- cgit v1.2.3