diff options
author | Nobuyoshi Nakada <[email protected]> | 2020-02-09 16:56:40 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2020-02-09 17:06:31 +0900 |
commit | aeaf0dc55595b8a5bfdd92007fb85ef13855c632 (patch) | |
tree | 9271d4f160e6732aa38b1c94bcc34d83fe0ec1e7 /gc.c | |
parent | c47cd4be28840159251b4c66df71e10e979316a0 (diff) |
Separate objspace argument for rb_gc_disable and rb_gc_enable
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 30 |
1 files changed, 24 insertions, 6 deletions
@@ -1095,6 +1095,7 @@ static int gc_verify_heap_page(rb_objspace_t *objspace, struct heap_page *page, 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, #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, 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 } 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 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 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 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 |