Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/memory_manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -566,13 +566,16 @@ pub fn total_bytes<VM: VMBinding>(mmtk: &MMTK<VM>) -> 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<VM: VMBinding>(mmtk: &MMTK<VM>, tls: VMMutatorThread) {
mmtk.handle_user_collection_request(tls, false, false);
pub fn handle_user_collection_request<VM: VMBinding>(
mmtk: &MMTK<VM>,
tls: VMMutatorThread,
) -> bool {
mmtk.handle_user_collection_request(tls, false, false)
}

/// Is the object alive?
Expand Down
9 changes: 6 additions & 3 deletions src/mmtk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ impl<VM: VMBinding> MMTK<VM> {
}

/// 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
Expand All @@ -412,11 +412,11 @@ impl<VM: VMBinding> MMTK<VM> {
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() {
Expand All @@ -432,7 +432,10 @@ impl<VM: VMBinding> MMTK<VM> {
.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).
Expand Down