diff options
| -rw-r--r-- | gc/mmtk/mmtk.c | 3 | ||||
| -rw-r--r-- | gc/mmtk/mmtk.h | 2 | ||||
| -rw-r--r-- | gc/mmtk/src/api.rs | 5 | ||||
| -rw-r--r-- | gc/mmtk/src/weak_proc.rs | 4 |
4 files changed, 14 insertions, 0 deletions
diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index b8af39cd99..d5cfda1be9 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -1410,6 +1410,7 @@ enum gc_stat_sym { gc_stat_sym_free_bytes, gc_stat_sym_starting_heap_address, gc_stat_sym_last_heap_address, + gc_stat_sym_weak_references_count, gc_stat_sym_last }; @@ -1428,6 +1429,7 @@ setup_gc_stat_symbols(void) S(free_bytes); S(starting_heap_address); S(last_heap_address); + S(weak_references_count); } } @@ -1463,6 +1465,7 @@ rb_gc_impl_stat(void *objspace_ptr, VALUE hash_or_sym) SET(free_bytes, mmtk_free_bytes()); SET(starting_heap_address, (size_t)mmtk_starting_heap_address()); SET(last_heap_address, (size_t)mmtk_last_heap_address()); + SET(weak_references_count, mmtk_weak_references_count()); #undef SET if (!NIL_P(key)) { diff --git a/gc/mmtk/mmtk.h b/gc/mmtk/mmtk.h index 4cef1668a4..ffbad1a025 100644 --- a/gc/mmtk/mmtk.h +++ b/gc/mmtk/mmtk.h @@ -129,6 +129,8 @@ void mmtk_declare_weak_references(MMTk_ObjectReference object); bool mmtk_weak_references_alive_p(MMTk_ObjectReference object); +size_t mmtk_weak_references_count(void); + void mmtk_register_pinning_obj(MMTk_ObjectReference obj); void mmtk_object_reference_write_post(MMTk_Mutator *mutator, MMTk_ObjectReference object); diff --git a/gc/mmtk/src/api.rs b/gc/mmtk/src/api.rs index 3515a2408b..5eac068672 100644 --- a/gc/mmtk/src/api.rs +++ b/gc/mmtk/src/api.rs @@ -317,6 +317,11 @@ pub extern "C" fn mmtk_weak_references_alive_p(object: ObjectReference) -> bool object.is_reachable() } +#[no_mangle] +pub extern "C" fn mmtk_weak_references_count() -> usize { + binding().weak_proc.weak_references_count() +} + // =============== Compaction =============== #[no_mangle] diff --git a/gc/mmtk/src/weak_proc.rs b/gc/mmtk/src/weak_proc.rs index d0a54f01bf..f103822b73 100644 --- a/gc/mmtk/src/weak_proc.rs +++ b/gc/mmtk/src/weak_proc.rs @@ -92,6 +92,10 @@ impl WeakProcessor { weak_references.push(object); } + pub fn weak_references_count(&self) -> usize { + self.weak_references.lock().unwrap().len() + } + pub fn process_weak_stuff( &self, worker: &mut GCWorker<Ruby>, |
