зеркало из https://github.com/github/ruby.git
Fix malloc_increase is not correctly calculated
Commit 123eeb1c1a
added incremental GC
which moved resetting malloc_increase, oldmalloc_increase to before
marking. However, during_minor_gc is not set until gc_marks_start. So
the value will be from the last GC run, rather than the current one.
Before the incremental GC commit, this code was in gc_before_sweep
which ran before sweep (after marking) so the value during_minor_gc
was correct.
This commit is contained in:
Родитель
b61064b821
Коммит
9770bf23b7
6
gc.c
6
gc.c
|
@ -8881,7 +8881,7 @@ ready_to_gc(rb_objspace_t *objspace)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gc_reset_malloc_info(rb_objspace_t *objspace)
|
gc_reset_malloc_info(rb_objspace_t *objspace, bool full_mark)
|
||||||
{
|
{
|
||||||
gc_prof_set_malloc_info(objspace);
|
gc_prof_set_malloc_info(objspace);
|
||||||
{
|
{
|
||||||
|
@ -8915,7 +8915,7 @@ gc_reset_malloc_info(rb_objspace_t *objspace)
|
||||||
|
|
||||||
/* reset oldmalloc info */
|
/* reset oldmalloc info */
|
||||||
#if RGENGC_ESTIMATE_OLDMALLOC
|
#if RGENGC_ESTIMATE_OLDMALLOC
|
||||||
if (!is_full_marking(objspace)) {
|
if (!full_mark) {
|
||||||
if (objspace->rgengc.oldmalloc_increase > objspace->rgengc.oldmalloc_increase_limit) {
|
if (objspace->rgengc.oldmalloc_increase > objspace->rgengc.oldmalloc_increase_limit) {
|
||||||
objspace->rgengc.need_major_gc |= GPR_FLAG_MAJOR_BY_OLDMALLOC;
|
objspace->rgengc.need_major_gc |= GPR_FLAG_MAJOR_BY_OLDMALLOC;
|
||||||
objspace->rgengc.oldmalloc_increase_limit =
|
objspace->rgengc.oldmalloc_increase_limit =
|
||||||
|
@ -9071,7 +9071,7 @@ gc_start(rb_objspace_t *objspace, unsigned int reason)
|
||||||
objspace->profile.total_allocated_objects_at_gc_start = objspace->total_allocated_objects;
|
objspace->profile.total_allocated_objects_at_gc_start = objspace->total_allocated_objects;
|
||||||
objspace->profile.heap_used_at_gc_start = heap_allocated_pages;
|
objspace->profile.heap_used_at_gc_start = heap_allocated_pages;
|
||||||
gc_prof_setup_new_record(objspace, reason);
|
gc_prof_setup_new_record(objspace, reason);
|
||||||
gc_reset_malloc_info(objspace);
|
gc_reset_malloc_info(objspace, do_full_mark);
|
||||||
rb_transient_heap_start_marking(do_full_mark);
|
rb_transient_heap_start_marking(do_full_mark);
|
||||||
|
|
||||||
gc_event_hook(objspace, RUBY_INTERNAL_EVENT_GC_START, 0 /* TODO: pass minor/immediate flag? */);
|
gc_event_hook(objspace, RUBY_INTERNAL_EVENT_GC_START, 0 /* TODO: pass minor/immediate flag? */);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче