ruby-changes:73509
From: nagachika <ko1@a...>
Date: Sat, 10 Sep 2022 16:12:43 +0900 (JST)
Subject: [ruby-changes:73509] 4508901fbd (ruby_3_1): merge revision(s) 261753249996d46e00c2549fff2527816bf387db: [Backport #18936]
https://git.ruby-lang.org/ruby.git/commit/?id=4508901fbd From 4508901fbd8825cc8d9aaf535b5201ade17a8392 Mon Sep 17 00:00:00 2001 From: nagachika <nagachika@r...> Date: Sat, 10 Sep 2022 16:04:33 +0900 Subject: merge revision(s) 261753249996d46e00c2549fff2527816bf387db: [Backport #18936] 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(-) --- gc.c | 21 +++++++++++++++++++-- version.h | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gc.c b/gc.c index ef9327df1f..7863f9590a 100644 --- a/gc.c +++ b/gc.c @@ -1738,6 +1738,7 @@ rb_objspace_alloc(void) https://github.com/ruby/ruby/blob/trunk/gc.c#L1738 } 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 @@ -1777,7 +1778,10 @@ rb_objspace_free(rb_objspace_t *objspace) https://github.com/ruby/ruby/blob/trunk/gc.c#L1778 } 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); } @@ -5997,9 +6001,8 @@ pop_mark_stack_chunk(mark_stack_t *stack) https://github.com/ruby/ruby/blob/trunk/gc.c#L6001 } 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) { @@ -6009,6 +6012,20 @@ free_stack_chunks(mark_stack_t *stack) https://github.com/ruby/ruby/blob/trunk/gc.c#L6012 } } +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) { diff --git a/version.h b/version.h index 83a5306811..bb0f7ed4bb 100644 --- a/version.h +++ b/version.h @@ -11,7 +11,7 @@ https://github.com/ruby/ruby/blob/trunk/version.h#L11 # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 3 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 49 +#define RUBY_PATCHLEVEL 50 #define RUBY_RELEASE_YEAR 2022 #define RUBY_RELEASE_MONTH 9 -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/