From 0ab414a93cee747eb97705ea3bddb3059bcd333d Mon Sep 17 00:00:00 2001 From: Kunal Sareen Date: Fri, 20 Sep 2024 04:58:06 +0000 Subject: [PATCH] Return if a GC ran or not for `handle_user_collection_request` --- src/memory_manager.rs | 6 +++--- src/mmtk.rs | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/memory_manager.rs b/src/memory_manager.rs index a0ae84a06c..f74bb2d5be 100644 --- a/src/memory_manager.rs +++ b/src/memory_manager.rs @@ -566,13 +566,13 @@ pub fn total_bytes(mmtk: &MMTK) -> usize { mmtk.get_plan().get_total_pages() << LOG_BYTES_IN_PAGE } -/// Trigger a garbage collection as requested by the user. +/// Trigger a garbage collection as requested by the user. Returns whether a GC was ran or not. /// /// Arguments: /// * `mmtk`: A reference to an MMTk instance. /// * `tls`: The thread that triggers this collection request. -pub fn handle_user_collection_request(mmtk: &MMTK, tls: VMMutatorThread) { - mmtk.handle_user_collection_request(tls, false, false); +pub fn handle_user_collection_request(mmtk: &MMTK, tls: VMMutatorThread) -> bool { + mmtk.handle_user_collection_request(tls, false, false) } /// Is the object alive? diff --git a/src/mmtk.rs b/src/mmtk.rs index f5f7622130..c89a65f285 100644 --- a/src/mmtk.rs +++ b/src/mmtk.rs @@ -401,7 +401,7 @@ impl MMTK { } /// The application code has requested a collection. This is just a GC hint, and - /// we may ignore it. + /// we may ignore it. Returns whether a GC was ran or not. /// /// # Arguments /// * `tls`: The mutator thread that requests the GC @@ -412,11 +412,11 @@ impl MMTK { tls: VMMutatorThread, force: bool, exhaustive: bool, - ) { + ) -> bool { use crate::vm::Collection; if !self.get_plan().constraints().collects_garbage { warn!("User attempted a collection request, but the plan can not do GC. The request is ignored."); - return; + return false; } if force || !*self.options.ignore_system_gc && VM::VMCollection::is_collection_enabled() { @@ -432,7 +432,10 @@ impl MMTK { .store(true, Ordering::Relaxed); self.gc_requester.request(); VM::VMCollection::block_for_gc(tls); + return true; } + + false } /// MMTK has requested stop-the-world activity (e.g., stw within a concurrent gc).