diff options
| author | Peter Zhu <peter@peterzhu.ca> | 2026-01-26 21:20:38 -0500 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2026-01-29 22:17:46 +0000 |
| commit | 457bb11aa5b2ce4424b611acb489686d130261de (patch) | |
| tree | 6dfb4c12609d4f9a7ff04ecbf9e18e4481c7d8f0 /gc | |
| parent | d9cc3c278b3535a9eefd0e573e72f0cdc3fec1f1 (diff) | |
[ruby/mmtk] Add weak_references_count to GC.stat
https://github.com/ruby/mmtk/commit/86fa2fd4af
Diffstat (limited to 'gc')
| -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>, |
