diff --git a/gc/gc.h b/gc/gc.h index 6f8b829..df70942 100644 --- a/gc/gc.h +++ b/gc/gc.h @@ -31,6 +31,7 @@ enum rb_gc_vm_weak_tables { RB_GC_VM_ID2REF_TABLE, RB_GC_VM_GENERIC_FIELDS_TABLE, RB_GC_VM_FROZEN_STRINGS_TABLE, + RB_GC_VM_CC_REFINEMENT_TABLE, RB_GC_VM_WEAK_TABLE_COUNT }; diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index 41e7f13..e00be5d 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -515,8 +515,7 @@ rb_gc_impl_start(void *objspace_ptr, bool full_mark, bool immediate_mark, bool i bool rb_gc_impl_during_gc_p(void *objspace_ptr) { - // TODO - return false; + return mmtk_gc_in_progress_p(); } static void diff --git a/gc/mmtk/mmtk.h b/gc/mmtk/mmtk.h index 72b4d9d..8a4f65e 100644 --- a/gc/mmtk/mmtk.h +++ b/gc/mmtk/mmtk.h @@ -99,6 +99,8 @@ void mmtk_set_gc_enabled(bool enable); bool mmtk_gc_enabled_p(void); +bool mmtk_gc_in_progress_p(void); + MMTk_Address mmtk_alloc(MMTk_Mutator *mutator, size_t size, size_t align, diff --git a/gc/mmtk/src/api.rs b/gc/mmtk/src/api.rs index a1b94d5..454025b 100644 --- a/gc/mmtk/src/api.rs +++ b/gc/mmtk/src/api.rs @@ -207,6 +207,11 @@ pub extern "C" fn mmtk_gc_enabled_p() -> bool { crate::CONFIGURATION.gc_enabled.load(Ordering::Relaxed) } +#[no_mangle] +pub extern "C" fn mmtk_gc_in_progress_p() -> bool { + crate::mmtk().gc_in_progress() +} + // =============== Object allocation =============== #[no_mangle]