[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]