diff options
Diffstat (limited to 'gc/default/default.c')
| -rw-r--r-- | gc/default/default.c | 24 |
1 files changed, 5 insertions, 19 deletions
diff --git a/gc/default/default.c b/gc/default/default.c index 4d4bd1af25..b39a1bd855 100644 --- a/gc/default/default.c +++ b/gc/default/default.c @@ -2610,24 +2610,9 @@ heap_idx_for_size(size_t size) } size_t -rb_gc_impl_heap_id_for_size(void *objspace_ptr, size_t size) +rb_gc_impl_size_slot_size(void *objspace_ptr, size_t size) { - return heap_idx_for_size(size); -} - - -static size_t heap_sizes[HEAP_COUNT + 1] = { 0 }; - -size_t * -rb_gc_impl_heap_sizes(void *objspace_ptr) -{ - if (heap_sizes[0] == 0) { - for (unsigned char i = 0; i < HEAP_COUNT; i++) { - heap_sizes[i] = heap_slot_size(i); - } - } - - return heap_sizes; + return heap_slot_size((unsigned char)heap_idx_for_size(size)); } NOINLINE(static VALUE newobj_cache_miss(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx, bool vm_locked)); @@ -2740,7 +2725,7 @@ newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, rb_objspace_t *objspace } VALUE -rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, bool wb_protected, size_t alloc_size) +rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, bool wb_protected, size_t alloc_size, size_t *actual_alloc_size) { VALUE obj; rb_objspace_t *objspace = objspace_ptr; @@ -2755,6 +2740,7 @@ rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags } size_t heap_idx = heap_idx_for_size(alloc_size); + *actual_alloc_size = heap_slot_size((unsigned char)heap_idx); rb_ractor_newobj_cache_t *cache = (rb_ractor_newobj_cache_t *)cache_ptr; @@ -7483,7 +7469,7 @@ gc_move(rb_objspace_t *objspace, VALUE src, VALUE dest, struct heap_page *src_pa memcpy((void *)dest, (void *)src, MIN(src_slot_size, slot_size)); if (src_slot_size != slot_size && RB_TYPE_P(src, T_OBJECT)) { - rb_gc_obj_changed_pool(dest, dest_page->heap - heaps); + rb_gc_obj_changed_slot_size(dest, slot_size - RVALUE_OVERHEAD); } if (RVALUE_OVERHEAD > 0) { |
