From c9df2cf15bd6a7bb294d33b3dd5a54fd8a951bce Mon Sep 17 00:00:00 2001 From: Yi Lin Date: Tue, 30 Jan 2024 03:33:33 +0000 Subject: [PATCH] Fix sanity GC --- src/scheduler/gc_work.rs | 6 +++++- src/util/sanity/sanity_checker.rs | 22 +++------------------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/scheduler/gc_work.rs b/src/scheduler/gc_work.rs index 692873eb84..a917afb476 100644 --- a/src/scheduler/gc_work.rs +++ b/src/scheduler/gc_work.rs @@ -1101,7 +1101,11 @@ impl + PlanTraceObject> GCWork, E: ProcessEdgesWork> { +pub(crate) struct ProcessRootNode< + VM: VMBinding, + I: ProcessEdgesWork, + E: ProcessEdgesWork, +> { phantom: PhantomData<(VM, I, E)>, roots: Vec, bucket: WorkBucketStage, diff --git a/src/util/sanity/sanity_checker.rs b/src/util/sanity/sanity_checker.rs index c3436470d8..10287f6791 100644 --- a/src/util/sanity/sanity_checker.rs +++ b/src/util/sanity/sanity_checker.rs @@ -96,12 +96,12 @@ impl GCWork for ScheduleSanityGC

{ ); } for roots in &sanity_checker.root_nodes { - scheduler.work_buckets[WorkBucketStage::Closure].add(ScanObjects::< + scheduler.work_buckets[WorkBucketStage::Closure].add(ProcessRootNode::< + P::VM, + SanityGCProcessEdges, SanityGCProcessEdges, >::new( roots.clone(), - false, - true, WorkBucketStage::Closure, )); } @@ -132,14 +132,6 @@ impl GCWork for SanityPrepare

{ let mut sanity_checker = mmtk.sanity_checker.lock().unwrap(); sanity_checker.refs.clear(); } - for mutator in ::VMActivePlan::mutators() { - mmtk.scheduler.work_buckets[WorkBucketStage::Prepare] - .add(PrepareMutator::::new(mutator)); - } - for w in &mmtk.scheduler.worker_group.workers_shared { - let result = w.designated_work.push(Box::new(PrepareCollector)); - debug_assert!(result.is_ok()); - } } } @@ -157,14 +149,6 @@ impl GCWork for SanityRelease

{ fn do_work(&mut self, _worker: &mut GCWorker, mmtk: &'static MMTK) { info!("Sanity GC release"); mmtk.sanity_checker.lock().unwrap().clear_roots_cache(); - for mutator in ::VMActivePlan::mutators() { - mmtk.scheduler.work_buckets[WorkBucketStage::Release] - .add(ReleaseMutator::::new(mutator)); - } - for w in &mmtk.scheduler.worker_group.workers_shared { - let result = w.designated_work.push(Box::new(ReleaseCollector)); - debug_assert!(result.is_ok()); - } mmtk.sanity_end(); } }