From 7f7dcb61789ee77ad71b11298b5e0236703faf40 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 29 Oct 2015 08:00:01 +0000 Subject: gc.c: separate event hook call from newobj_init * gc.c (newobj_init): separate event hook call and remove the argument for it. * gc.c (newobj_slowpath): call event hook after initialized the new object. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- gc.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'gc.c') diff --git a/gc.c b/gc.c index a852d5fea8..a4ba4289e1 100644 --- a/gc.c +++ b/gc.c @@ -1705,7 +1705,7 @@ gc_event_hook_body(rb_thread_t *th, rb_objspace_t *objspace, const rb_event_flag } while (0) static inline VALUE -newobj_init(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_protected, rb_objspace_t *objspace, VALUE obj, int hook_needed) +newobj_init(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_protected, rb_objspace_t *objspace, VALUE obj) { if (RGENGC_CHECK_MODE > 0) { assert(BUILTIN_TYPE(obj) == T_NONE); @@ -1763,9 +1763,6 @@ newobj_init(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_prote objspace->total_allocated_objects++; - if (UNLIKELY(hook_needed)) { - gc_event_hook(objspace, RUBY_INTERNAL_EVENT_NEWOBJ, obj); - } gc_report(5, objspace, "newobj: %s\n", obj_info(obj)); #if RGENGC_OLD_NEWOBJ_CHECK > 0 @@ -1812,7 +1809,9 @@ newobj_slowpath(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_p } obj = heap_get_freeobj(objspace, heap_eden); - return newobj_init(klass, flags, v1, v2, v3, wb_protected, objspace, obj, gc_event_hook_needed_p(objspace, RUBY_INTERNAL_EVENT_NEWOBJ)); + newobj_init(klass, flags, v1, v2, v3, wb_protected, objspace, obj); + gc_event_hook(objspace, RUBY_INTERNAL_EVENT_NEWOBJ, obj); + return obj; } static inline VALUE @@ -1834,7 +1833,7 @@ newobj_of(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, int wb_protect ruby_gc_stressful || gc_event_hook_available_p(objspace)) && (obj = heap_get_freeobj_head(objspace, heap_eden)) != Qfalse)) { - return newobj_init(klass, flags, v1, v2, v3, wb_protected, objspace, obj, FALSE); + return newobj_init(klass, flags, v1, v2, v3, wb_protected, objspace, obj); } else { return newobj_slowpath(klass, flags, v1, v2, v3, wb_protected, objspace); -- cgit v1.2.3