From dedb6123d6bea756f0074f2913dcf830ca3564d9 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Fri, 2 Oct 2026 18:07:17 +0900 Subject: [PATCH] Implement mmtk_is_pinned --- gc/mmtk/mmtk.c | 3 +-- gc/mmtk/mmtk.h | 2 ++ gc/mmtk/src/api.rs | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index a7d0544..6311a60 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -1221,8 +1221,7 @@ rb_gc_impl_object_moved_p(void *objspace_ptr, VALUE obj) bool rb_gc_impl_pinned_p(void *objspace_ptr, VALUE obj) { - /* MMTk tracks pinning separately */ - return false; + return mmtk_is_pinned((MMTk_ObjectReference)obj); } VALUE diff --git a/gc/mmtk/mmtk.h b/gc/mmtk/mmtk.h index 7f330b8..b81cf91 100644 --- a/gc/mmtk/mmtk.h +++ b/gc/mmtk/mmtk.h @@ -140,6 +140,8 @@ size_t mmtk_weak_references_count(void); void mmtk_register_pinning_obj(MMTk_ObjectReference obj); +bool mmtk_is_pinned(MMTk_ObjectReference object); + void mmtk_object_reference_write_post(MMTk_Mutator *mutator, MMTk_ObjectReference object); void mmtk_register_wb_unprotected_object(MMTk_ObjectReference object); diff --git a/gc/mmtk/src/api.rs b/gc/mmtk/src/api.rs index c8d83d3..ae341d0 100644 --- a/gc/mmtk/src/api.rs +++ b/gc/mmtk/src/api.rs @@ -414,6 +414,11 @@ pub extern "C" fn mmtk_register_pinning_obj(obj: ObjectReference) { crate::binding().pinning_registry.register(obj); } +#[unsafe(no_mangle)] +pub extern "C" fn mmtk_is_pinned(object: ObjectReference) -> bool { + memory_manager::is_pinned(object) +} + // =============== Write barriers =============== #[unsafe(no_mangle)]