Skip to content

Commit f08c4fb

Browse files
committed
tmp commit
1 parent 3845778 commit f08c4fb

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

gc/default/default.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2056,7 +2056,7 @@ heap_allocatable_bytes_expand(rb_objspace_t *objspace,
20562056
}
20572057

20582058
if (gc_params.growth_max_bytes > 0) {
2059-
size_t max_total_slots = total_slots + gc_params.growth_max_bytes / slot_size;
2059+
size_t max_total_slots = total_slots + (gc_params.growth_max_bytes / slot_size);
20602060
if (target_total_slots > max_total_slots) target_total_slots = max_total_slots;
20612061
}
20622062

@@ -2106,6 +2106,7 @@ heap_unlink_page(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *pag
21062106
GC_ASSERT(heap->total_pages > 0);
21072107
heap->total_pages--;
21082108
GC_ASSERT(heap->total_slots >= page->total_slots);
2109+
GC_ASSERT(page->total_slots > 0);
21092110
heap->total_slots -= page->total_slots;
21102111
}
21112112

@@ -3053,8 +3054,7 @@ rb_gc_impl_make_zombie(void *objspace_ptr, VALUE obj, void (*dfree)(void *), voi
30533054
zombie->dfree = dfree;
30543055
zombie->data = data;
30553056
VALUE prev, next = (VALUE)RUBY_ATOMIC_PTR_LOAD(heap_pages_deferred_final);
3056-
struct heap_page *page_after = GET_HEAP_PAGE(zombie);
3057-
GC_ASSERT(page == page_after);
3057+
GC_ASSERT(page == GET_HEAP_PAGE(zombie));
30583058
do {
30593059
zombie->next = prev = next;
30603060
next = RUBY_ATOMIC_VALUE_CAS(heap_pages_deferred_final, prev, obj);
@@ -7019,7 +7019,13 @@ gc_marks_finish(rb_objspace_t *objspace)
70197019
}
70207020

70217021
if (full_marking) {
7022-
heap_allocatable_bytes_expand(objspace, NULL, sweep_slots, total_slots, heaps[0].slot_size);
7022+
/* Use weighted average slot size since total_slots spans all heaps */
7023+
size_t total_heap_bytes = 0;
7024+
for (int i = 0; i < HEAP_COUNT; i++) {
7025+
total_heap_bytes += heaps[i].total_slots * heaps[i].slot_size;
7026+
}
7027+
size_t avg_slot_size = total_slots > 0 ? total_heap_bytes / total_slots : heaps[0].slot_size;
7028+
heap_allocatable_bytes_expand(objspace, NULL, sweep_slots, total_slots, avg_slot_size);
70237029
}
70247030
}
70257031

0 commit comments

Comments
 (0)