summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2019-05-24 17:35:22 +0900
committerKoichi Sasada <ko1@atdot.net>2019-05-24 17:35:22 +0900
commit712c027524e3a03500b3098d950fc2f0608ce897 (patch)
treef31e3be88fc46bd9c0515fd1ada4e74035e3d518 /gc.c
parent10927b59256aeb196d164e8a8e75180a72768e97 (diff)
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.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gc.c b/gc.c
index af9879a47f..57771db383 100644
--- a/gc.c
+++ b/gc.c
@@ -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;
}