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/