ruby-changes:71145
From: Peter <ko1@a...>
Date: Thu, 10 Feb 2022 23:34:01 +0900 (JST)
Subject: [ruby-changes:71145] 2617532499 (master): Free cached mark stack chunks when freeing objspace
https://git.ruby-lang.org/ruby.git/commit/?id=2617532499 From 261753249996d46e00c2549fff2527816bf387db Mon Sep 17 00:00:00 2001 From: Peter Zhu <peter@p...> Date: Tue, 8 Feb 2022 14:28:18 -0500 Subject: Free cached mark stack chunks when freeing objspace Cached mark stack chunks should also be freed when freeing objspace. --- gc.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/gc.c b/gc.c index e637861ab2..d4b798b381 100644 --- a/gc.c +++ b/gc.c @@ -1778,6 +1778,7 @@ rb_objspace_alloc(void) https://github.com/ruby/ruby/blob/trunk/gc.c#L1778 } static void free_stack_chunks(mark_stack_t *); +static void mark_stack_free_cache(mark_stack_t *); static void heap_page_free(rb_objspace_t *objspace, struct heap_page *page); void @@ -1817,7 +1818,10 @@ rb_objspace_free(rb_objspace_t *objspace) https://github.com/ruby/ruby/blob/trunk/gc.c#L1818 } st_free_table(objspace->id_to_obj_tbl); st_free_table(objspace->obj_to_id_tbl); + free_stack_chunks(&objspace->mark_stack); + mark_stack_free_cache(&objspace->mark_stack); + free(objspace); } @@ -6092,9 +6096,8 @@ pop_mark_stack_chunk(mark_stack_t *stack) https://github.com/ruby/ruby/blob/trunk/gc.c#L6096 } static void -free_stack_chunks(mark_stack_t *stack) +mark_stack_chunk_list_free(stack_chunk_t *chunk) { - stack_chunk_t *chunk = stack->chunk; stack_chunk_t *next = NULL; while (chunk != NULL) { @@ -6104,6 +6107,20 @@ free_stack_chunks(mark_stack_t *stack) https://github.com/ruby/ruby/blob/trunk/gc.c#L6107 } } +static void +free_stack_chunks(mark_stack_t *stack) +{ + mark_stack_chunk_list_free(stack->chunk); +} + +static void +mark_stack_free_cache(mark_stack_t *stack) +{ + mark_stack_chunk_list_free(stack->cache); + stack->cache_size = 0; + stack->unused_cache_size = 0; +} + static void push_mark_stack(mark_stack_t *stack, VALUE data) { -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/