mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Separate objspace argument for rb_gc_disable and rb_gc_enable
(cherry picked from commit aeaf0dc555
)
This commit is contained in:
parent
047dfbdf69
commit
9f504bb474
2 changed files with 27 additions and 6 deletions
30
gc.c
30
gc.c
|
@ -1062,6 +1062,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);
|
||||
|
@ -5863,7 +5864,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);
|
||||
|
||||
|
@ -5881,7 +5882,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;
|
||||
|
@ -8548,7 +8549,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);
|
||||
|
@ -8559,7 +8560,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);
|
||||
|
@ -9210,6 +9211,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;
|
||||
|
@ -9226,18 +9233,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
|
||||
|
|
|
@ -1635,6 +1635,8 @@ void Init_heap(void);
|
|||
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 *);
|
||||
#if USE_RGENGC
|
||||
void rb_gc_writebarrier_remember(VALUE obj);
|
||||
#else
|
||||
|
@ -2339,6 +2341,7 @@ enum method_missing_reason {
|
|||
struct rb_callable_method_entry_struct;
|
||||
struct rb_method_definition_struct;
|
||||
struct rb_execution_context_struct;
|
||||
struct rb_objspace; /* in vm_core.h */
|
||||
struct rb_control_frame_struct;
|
||||
struct rb_calling_info;
|
||||
struct rb_call_data;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue