diff options
author | Peter Zhu <[email protected]> | 2025-01-14 12:05:23 -0500 |
---|---|---|
committer | git <[email protected]> | 2025-01-14 17:07:21 +0000 |
commit | 2bcbc80fa26795145584af2a1cb322ac7b46f13e (patch) | |
tree | 338b2753cbd0c22cefef2617e28df607dfe38a58 /gc/mmtk | |
parent | f627e05d14bf3482b4e864cd4ab237b0a92df0d7 (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.rs | 23 |
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)) } |