Skip to content

Commit 39e9044

Browse files
committed
Use stock heap_set_increment implementation and calling behavior
1 parent 3d8ac37 commit 39e9044

File tree

1 file changed

+10
-15
lines changed

1 file changed

+10
-15
lines changed

gc.c

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,30 +1196,26 @@ heap_add_pages(rb_objspace_t *objspace, rb_heap_t *heap, size_t add)
11961196
heap_pages_increment = 0;
11971197
}
11981198

1199-
static size_t
1200-
heap_extend_pages(rb_objspace_t *objspace)
1199+
static void
1200+
heap_set_increment(rb_objspace_t *objspace, size_t minimum_limit)
12011201
{
12021202
size_t used = heap_pages_used - heap_tomb->page_length;
12031203
size_t next_used_limit = (size_t)(used * gc_params.growth_factor);
1204-
12051204
if (gc_params.growth_max_slots > 0) {
12061205
size_t max_used_limit = (size_t)(used + gc_params.growth_max_slots/HEAP_OBJ_LIMIT);
12071206
if (next_used_limit > max_used_limit) next_used_limit = max_used_limit;
12081207
}
1208+
if (next_used_limit == heap_pages_used) next_used_limit++;
12091209

1210-
return next_used_limit - used;
1210+
if (next_used_limit < minimum_limit) {
1211+
next_used_limit = minimum_limit;
12111212
}
12121213

1213-
static void
1214-
heap_set_increment(rb_objspace_t *objspace, size_t additional_pages)
1215-
{
1216-
size_t used = heap_eden->page_length;
1217-
size_t next_used_limit = used + additional_pages;
1218-
1219-
if (next_used_limit == heap_pages_used) next_used_limit++;
1220-
12211214
heap_pages_increment = next_used_limit - used;
12221215
heap_pages_expand_sorted(objspace);
1216+
1217+
if (0) fprintf(stderr, "heap_set_increment: heap_pages_length: %d, heap_pages_used: %d, heap_pages_increment: %d, next_used_limit: %d\n",
1218+
(int)heap_pages_length, (int)heap_pages_used, (int)heap_pages_increment, (int)next_used_limit);
12231219
}
12241220

12251221
static int
@@ -2862,7 +2858,7 @@ gc_heap_prepare_minimum_pages(rb_objspace_t *objspace, rb_heap_t *heap)
28622858
{
28632859
if (!heap->free_pages) {
28642860
/* there is no free after page_sweep() */
2865-
heap_set_increment(objspace, 1);
2861+
heap_set_increment(objspace, 0);
28662862
if (!heap_increment(objspace, heap)) { /* can't allocate additional free objects */
28672863
during_gc = 0;
28682864
rb_memerror();
@@ -4199,7 +4195,6 @@ gc_marks_body(rb_objspace_t *objspace, int full_mark)
41994195
}
42004196
else {
42014197
objspace->profile.major_gc_count++;
4202-
objspace->rgengc.last_major_gc = objspace->profile.count;
42034198
rgengc_mark_and_rememberset_clear(objspace, heap_eden);
42044199
}
42054200
#endif
@@ -5079,7 +5074,7 @@ heap_ready_to_gc(rb_objspace_t *objspace, rb_heap_t *heap)
50795074
if (dont_gc || during_gc) {
50805075
if (!heap->freelist && !heap->free_pages) {
50815076
if (!heap_increment(objspace, heap)) {
5082-
heap_set_increment(objspace, 1);
5077+
heap_set_increment(objspace, 0);
50835078
heap_increment(objspace, heap);
50845079
}
50855080
}

0 commit comments

Comments
 (0)