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

ruby-changes:59967

From: Nobuyoshi <ko1@a...>
Date: Sun, 9 Feb 2020 17:18:33 +0900 (JST)
Subject: [ruby-changes:59967] aeaf0dc555 (master): Separate objspace argument for rb_gc_disable and rb_gc_enable

https://git.ruby-lang.org/ruby.git/commit/?id=aeaf0dc555

From aeaf0dc55595b8a5bfdd92007fb85ef13855c632 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Sun, 9 Feb 2020 16:56:40 +0900
Subject: Separate objspace argument for rb_gc_disable and rb_gc_enable


diff --git a/gc.c b/gc.c
index 2c7de4f..779b4b0 100644
--- a/gc.c
+++ b/gc.c
@@ -1095,6 +1095,7 @@ static int gc_verify_heap_page(rb_objspace_t *objspace, struct heap_page *page, https://github.com/ruby/ruby/blob/trunk/gc.c#L1095
 static int gc_verify_heap_pages(rb_objspace_t *objspace);
 
 static void gc_stress_set(rb_objspace_t *objspace, VALUE flag);
+static VALUE gc_disable_no_rest(rb_objspace_t *);
 
 static double getrusage_time(void);
 static inline void gc_prof_setup_new_record(rb_objspace_t *objspace, int reason);
@@ -5902,7 +5903,7 @@ gc_marks_check(rb_objspace_t *objspace, st_foreach_callback_func *checker_func, https://github.com/ruby/ruby/blob/trunk/gc.c#L5903
 #if RGENGC_ESTIMATE_OLDMALLOC
     size_t saved_oldmalloc_increase = objspace->rgengc.oldmalloc_increase;
 #endif
-    VALUE already_disabled = rb_gc_disable();
+    VALUE already_disabled = rb_objspace_gc_disable(objspace);
 
     objspace->rgengc.allrefs_table = objspace_allrefs(objspace);
 
@@ -5920,7 +5921,7 @@ gc_marks_check(rb_objspace_t *objspace, st_foreach_callback_func *checker_func, https://github.com/ruby/ruby/blob/trunk/gc.c#L5921
     objspace_allrefs_destruct(objspace->rgengc.allrefs_table);
     objspace->rgengc.allrefs_table = 0;
 
-    if (already_disabled == Qfalse) rb_gc_enable();
+    if (already_disabled == Qfalse) rb_objspace_gc_enable(objspace);
     objspace->malloc_params.increase = saved_malloc_increase;
 #if RGENGC_ESTIMATE_OLDMALLOC
     objspace->rgengc.oldmalloc_increase = saved_oldmalloc_increase;
@@ -8585,7 +8586,7 @@ gc_compact_after_gc(rb_objspace_t *objspace, int use_toward_empty, int use_doubl https://github.com/ruby/ruby/blob/trunk/gc.c#L8586
     }
 
     VALUE moved_list_head;
-    VALUE disabled = rb_gc_disable();
+    VALUE disabled = rb_objspace_gc_disable(objspace);
 
     if (use_toward_empty) {
         moved_list_head = gc_compact_heap(objspace, compare_free_slots);
@@ -8596,7 +8597,7 @@ gc_compact_after_gc(rb_objspace_t *objspace, int use_toward_empty, int use_doubl https://github.com/ruby/ruby/blob/trunk/gc.c#L8597
     heap_eden->freelist = NULL;
 
     gc_update_references(objspace);
-    if (!RTEST(disabled)) rb_gc_enable();
+    if (!RTEST(disabled)) rb_objspace_gc_enable(objspace);
 
     if (use_verifier) {
         gc_check_references_for_moved(objspace);
@@ -9208,6 +9209,12 @@ VALUE https://github.com/ruby/ruby/blob/trunk/gc.c#L9209
 rb_gc_enable(void)
 {
     rb_objspace_t *objspace = &rb_objspace;
+    return rb_objspace_gc_enable(objspace);
+}
+
+VALUE
+rb_objspace_gc_enable(rb_objspace_t *objspace)
+{
     int old = dont_gc;
 
     dont_gc = FALSE;
@@ -9224,18 +9231,29 @@ VALUE https://github.com/ruby/ruby/blob/trunk/gc.c#L9231
 rb_gc_disable_no_rest(void)
 {
     rb_objspace_t *objspace = &rb_objspace;
+    return gc_disable_no_rest(objspace);
+}
+
+static VALUE
+gc_disable_no_rest(rb_objspace_t *objspace)
+{
     int old = dont_gc;
     dont_gc = TRUE;
     return old ? Qtrue : Qfalse;
 }
 
-
 VALUE
 rb_gc_disable(void)
 {
     rb_objspace_t *objspace = &rb_objspace;
+    return rb_objspace_gc_disable(objspace);
+}
+
+VALUE
+rb_objspace_gc_disable(rb_objspace_t *objspace)
+{
     gc_rest(objspace);
-    return rb_gc_disable_no_rest();
+    return gc_disable_no_rest(objspace);
 }
 
 static VALUE
diff --git a/internal/gc.h b/internal/gc.h
index 36b534e..86a3113 100644
--- a/internal/gc.h
+++ b/internal/gc.h
@@ -17,6 +17,7 @@ https://github.com/ruby/ruby/blob/trunk/internal/gc.h#L17
 #include "ruby/ruby.h"          /* for rb_event_flag_t */
 
 struct rb_execution_context_struct; /* in vm_core.h */
+struct rb_objspace; /* in vm_core.h */
 
 #ifdef NEWOBJ_OF
 # undef NEWOBJ_OF
@@ -60,6 +61,8 @@ extern int ruby_disable_gc; https://github.com/ruby/ruby/blob/trunk/internal/gc.h#L61
 void *ruby_mimmalloc(size_t size) RUBY_ATTR_MALLOC;
 void ruby_mimfree(void *ptr);
 void rb_objspace_set_event_hook(const rb_event_flag_t event);
+VALUE rb_objspace_gc_enable(struct rb_objspace *);
+VALUE rb_objspace_gc_disable(struct rb_objspace *);
 void ruby_gc_set_params(void);
 void rb_copy_wb_protected_attribute(VALUE dest, VALUE obj);
 #if __has_attribute(alloc_align)
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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