@@ -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
12251221static 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