From 6be0ab73c3f2cc95d76ca21203adf6a73c8705e7 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Thu, 23 May 2019 16:52:14 +0900 Subject: [PATCH] gc_pin() doesn't check is_markable_object(). Caller of gc_pin() should check it is a mark-able object. So gc_pin() doesn't need to check it. With this fix, we can refactoring around it. --- gc.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/gc.c b/gc.c index 4790dc4fa1..3dd3ba7208 100644 --- a/gc.c +++ b/gc.c @@ -4693,8 +4693,7 @@ gc_mark_maybe(rb_objspace_t *objspace, VALUE obj) case T_NONE: break; default: - gc_pin(objspace, obj); - gc_mark_ptr(objspace, obj); + gc_mark_and_pin(objspace, obj); break; } @@ -4844,18 +4843,18 @@ gc_mark_ptr(rb_objspace_t *objspace, VALUE obj) } static inline void -gc_mark_and_pin(rb_objspace_t *objspace, VALUE obj) +gc_pin(rb_objspace_t *objspace, VALUE obj) { - if (!is_markable_object(objspace, obj)) return; + GC_ASSERT(is_markable_object(objspace, obj)); MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), obj); - gc_mark_ptr(objspace, obj); } static inline void -gc_pin(rb_objspace_t *objspace, VALUE obj) +gc_mark_and_pin(rb_objspace_t *objspace, VALUE obj) { if (!is_markable_object(objspace, obj)) return; - MARK_IN_BITMAP(GET_HEAP_PINNED_BITS(obj), obj); + gc_pin(objspace, obj); + gc_mark_ptr(objspace, obj); } static inline void