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

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/

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