diff options
author | Koichi Sasada <ko1@atdot.net> | 2019-05-24 17:35:22 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2019-05-24 17:35:22 +0900 |
commit | 712c027524e3a03500b3098d950fc2f0608ce897 (patch) | |
tree | f31e3be88fc46bd9c0515fd1ada4e74035e3d518 /gc.c | |
parent | 10927b59256aeb196d164e8a8e75180a72768e97 (diff) | |
download | ruby-712c027524e3a03500b3098d950fc2f0608ce897.tar.gz |
check it in eden or tomb.
is_pointer_to_heap() checks if it is in valid pointer to the
RVALUE in any heap_page_body. However, it returns true if it
points tomb pages. This patch check it points to eden pages.
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -2207,8 +2207,10 @@ is_pointer_to_heap(rb_objspace_t *objspace, void *ptr) page = heap_pages_sorted[mid]; if (page->start <= p) { if (p < page->start + page->total_slots) { - RB_DEBUG_COUNTER_INC(gc_isptr_maybe); - return TRUE; + if (!page->flags.in_tomb) { + RB_DEBUG_COUNTER_INC(gc_isptr_maybe); + return TRUE; + } } lo = mid + 1; } |