summaryrefslogtreecommitdiff
path: root/gc/mmtk
diff options
context:
space:
mode:
authorPeter Zhu <[email protected]>2025-01-14 12:05:23 -0500
committergit <[email protected]>2025-01-14 17:07:21 +0000
commit2bcbc80fa26795145584af2a1cb322ac7b46f13e (patch)
tree338b2753cbd0c22cefef2617e28df607dfe38a58 /gc/mmtk
parentf627e05d14bf3482b4e864cd4ab237b0a92df0d7 (diff)
[ruby/mmtk] Exit with error message if MMTK_HEAP_MODE is invalid
https://github.com/ruby/mmtk/commit/c8b1f4c156
Diffstat (limited to 'gc/mmtk')
-rw-r--r--gc/mmtk/src/api.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/gc/mmtk/src/api.rs b/gc/mmtk/src/api.rs
index f69d091f5e..5d1351ef9c 100644
--- a/gc/mmtk/src/api.rs
+++ b/gc/mmtk/src/api.rs
@@ -77,6 +77,20 @@ fn mmtk_builder_default_parse_heap_max() -> usize {
size
}
+fn mmtk_builder_default_parse_heap_mode(heap_min: usize, heap_max: usize) -> GCTriggerSelector {
+ let heap_mode_str = std::env::var("MMTK_HEAP_MODE")
+ .unwrap_or("dynamic".to_string());
+
+ match heap_mode_str.as_str() {
+ "fixed" => GCTriggerSelector::FixedHeapSize(heap_max),
+ "dynamic" => GCTriggerSelector::DynamicHeapSize(heap_min, heap_max),
+ _ => {
+ eprintln!("[FATAL] Invalid MMTK_HEAP_MODE {}", heap_mode_str);
+ std::process::exit(1);
+ }
+ }
+}
+
#[no_mangle]
pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
let mut builder = MMTKBuilder::new_no_env_vars();
@@ -96,10 +110,7 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
std::process::exit(1);
}
- let mmtk_mode = match std::env::var("MMTK_HEAP_MODE") {
- Ok(mode) if (mode == "fixed") => GCTriggerSelector::FixedHeapSize(heap_max),
- Ok(_) | Err(_) => GCTriggerSelector::DynamicHeapSize(heap_min, heap_max)
- };
+ let heap_mode = mmtk_builder_default_parse_heap_mode(heap_min, heap_max);
// Parse the env var, if it's not found set the plan name to MarkSweep
let plan_name = std::env::var("MMTK_PLAN")
@@ -111,9 +122,7 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
builder.options.plan.set(plan_selector);
- // Between 1MiB and 500MiB
- builder.options.gc_trigger.set(mmtk_mode);
-
+ builder.options.gc_trigger.set(heap_mode);
Box::into_raw(Box::new(builder))
}