Skip to content

Commit dedb612

Browse files
committed
Implement mmtk_is_pinned
1 parent 8eb9898 commit dedb612

3 files changed

Lines changed: 8 additions & 2 deletions

File tree

‎gc/mmtk/mmtk.c‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1221,8 +1221,7 @@ rb_gc_impl_object_moved_p(void *objspace_ptr, VALUE obj)
12211221
bool
12221222
rb_gc_impl_pinned_p(void *objspace_ptr, VALUE obj)
12231223
{
1224-
/* MMTk tracks pinning separately */
1225-
return false;
1224+
return mmtk_is_pinned((MMTk_ObjectReference)obj);
12261225
}
12271226

12281227
VALUE

‎gc/mmtk/mmtk.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ size_t mmtk_weak_references_count(void);
140140

141141
void mmtk_register_pinning_obj(MMTk_ObjectReference obj);
142142

143+
bool mmtk_is_pinned(MMTk_ObjectReference object);
144+
143145
void mmtk_object_reference_write_post(MMTk_Mutator *mutator, MMTk_ObjectReference object);
144146

145147
void mmtk_register_wb_unprotected_object(MMTk_ObjectReference object);

‎gc/mmtk/src/api.rs‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,11 @@ pub extern "C" fn mmtk_register_pinning_obj(obj: ObjectReference) {
414414
crate::binding().pinning_registry.register(obj);
415415
}
416416

417+
#[unsafe(no_mangle)]
418+
pub extern "C" fn mmtk_is_pinned(object: ObjectReference) -> bool {
419+
memory_manager::is_pinned(object)
420+
}
421+
417422
// =============== Write barriers ===============
418423

419424
#[unsafe(no_mangle)]

0 commit comments

Comments
 (0)