summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gc/mmtk/mmtk.c5
-rw-r--r--gc/mmtk/mmtk.h2
-rw-r--r--gc/mmtk/src/abi.rs2
-rw-r--r--gc/mmtk/src/weak_proc.rs5
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 {