diff options
| -rw-r--r-- | gc/mmtk/mmtk.c | 5 | ||||
| -rw-r--r-- | gc/mmtk/mmtk.h | 2 | ||||
| -rw-r--r-- | gc/mmtk/src/abi.rs | 2 | ||||
| -rw-r--r-- | gc/mmtk/src/weak_proc.rs | 5 |
4 files changed, 8 insertions, 6 deletions
diff --git a/gc/mmtk/mmtk.c b/gc/mmtk/mmtk.c index b9fccd6b4c..b8af39cd99 100644 --- a/gc/mmtk/mmtk.c +++ b/gc/mmtk/mmtk.c @@ -439,16 +439,15 @@ rb_mmtk_update_global_tables_replace_i(VALUE *ptr, void *data) } static void -rb_mmtk_update_global_tables(int table) +rb_mmtk_update_global_tables(int table, bool moving) { MMTK_ASSERT(table < RB_GC_VM_WEAK_TABLE_COUNT); - // TODO: set weak_only to true for non-moving GC rb_gc_vm_weak_table_foreach( rb_mmtk_update_global_tables_i, rb_mmtk_update_global_tables_replace_i, NULL, - false, + !moving, (enum rb_gc_vm_weak_tables)table ); } diff --git a/gc/mmtk/mmtk.h b/gc/mmtk/mmtk.h index 21a5bf9415..4cef1668a4 100644 --- a/gc/mmtk/mmtk.h +++ b/gc/mmtk/mmtk.h @@ -74,7 +74,7 @@ typedef struct MMTk_RubyUpcalls { void (*handle_weak_references)(MMTk_ObjectReference object, bool moving); void (*call_obj_free)(MMTk_ObjectReference object); size_t (*vm_live_bytes)(void); - void (*update_global_tables)(int tbl_idx); + void (*update_global_tables)(int tbl_idx, bool moving); int (*global_tables_count)(void); void (*update_finalizer_table)(void); bool (*special_const_p)(MMTk_ObjectReference object); diff --git a/gc/mmtk/src/abi.rs b/gc/mmtk/src/abi.rs index 255b2b1e56..2a0e9113fa 100644 --- a/gc/mmtk/src/abi.rs +++ b/gc/mmtk/src/abi.rs @@ -318,7 +318,7 @@ pub struct RubyUpcalls { pub handle_weak_references: extern "C" fn(object: ObjectReference, moving: bool), pub call_obj_free: extern "C" fn(object: ObjectReference), pub vm_live_bytes: extern "C" fn() -> usize, - pub update_global_tables: extern "C" fn(tbl_idx: c_int), + pub update_global_tables: extern "C" fn(tbl_idx: c_int, moving: bool), pub global_tables_count: extern "C" fn() -> c_int, pub update_finalizer_table: extern "C" fn(), pub special_const_p: extern "C" fn(object: ObjectReference) -> bool, diff --git a/gc/mmtk/src/weak_proc.rs b/gc/mmtk/src/weak_proc.rs index 19dc6a0ee1..d0a54f01bf 100644 --- a/gc/mmtk/src/weak_proc.rs +++ b/gc/mmtk/src/weak_proc.rs @@ -270,7 +270,10 @@ struct UpdateGlobalTables { } impl GlobalTableProcessingWork for UpdateGlobalTables { fn process_table(&mut self) { - (crate::upcalls().update_global_tables)(self.idx) + (crate::upcalls().update_global_tables)( + self.idx, + crate::mmtk().get_plan().current_gc_may_move_object(), + ) } } impl GCWork<Ruby> for UpdateGlobalTables { |
