diff options
author | Peter Zhu <[email protected]> | 2025-01-13 15:06:20 -0500 |
---|---|---|
committer | git <[email protected]> | 2025-01-13 20:08:20 +0000 |
commit | ed4b1f9c1acac821e27d440d2bbb6837b59a7470 (patch) | |
tree | 1601eaa980a6741f953cb6fdbcbf5a83e7fa4a13 /gc/mmtk/src | |
parent | f821a127eab4a4583f4b6336ec7ff0a1dc6d6569 (diff) |
[ruby/mmtk] Exit with error message if MMTK_HEAP_MAX is invalid
https://github.com/ruby/mmtk/commit/4a24d55d91
Diffstat (limited to 'gc/mmtk/src')
-rw-r--r-- | gc/mmtk/src/api.rs | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/gc/mmtk/src/api.rs b/gc/mmtk/src/api.rs index 6e0cd254e5..f69d091f5e 100644 --- a/gc/mmtk/src/api.rs +++ b/gc/mmtk/src/api.rs @@ -64,6 +64,19 @@ fn mmtk_builder_default_parse_heap_min() -> usize { size } +fn mmtk_builder_default_parse_heap_max() -> usize { + let heap_max_str = std::env::var("MMTK_HEAP_MAX") + .unwrap_or(default_heap_max().to_string()); + + let size = parse_capacity(&heap_max_str, 0); + if size == 0 { + eprintln!("[FATAL] Invalid MMTK_HEAP_MAX {}", heap_max_str); + std::process::exit(1); + } + + size +} + #[no_mangle] pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder { let mut builder = MMTKBuilder::new_no_env_vars(); @@ -76,25 +89,16 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder { let heap_min = mmtk_builder_default_parse_heap_min(); - let mmtk_heap_max = match std::env::var("MMTK_HEAP_MAX") { - Ok(max) => { - let capa = parse_capacity(&max, default_heap_max()); - if capa == default_heap_max() { - eprintln!("MMTK_HEAP_MAX: value ({}) unusable, Using default.", max) - }; - capa - }, - Err(_) => default_heap_max() - }; + let heap_max = mmtk_builder_default_parse_heap_max(); - if heap_min >= mmtk_heap_max { - eprintln!("[FATAL] MMTK_HEAP_MIN({}) >= MMTK_HEAP_MAX({})", heap_min, mmtk_heap_max); + if heap_min >= heap_max { + eprintln!("[FATAL] MMTK_HEAP_MIN({}) >= MMTK_HEAP_MAX({})", heap_min, heap_max); std::process::exit(1); } let mmtk_mode = match std::env::var("MMTK_HEAP_MODE") { - Ok(mode) if (mode == "fixed") => GCTriggerSelector::FixedHeapSize(mmtk_heap_max), - Ok(_) | Err(_) => GCTriggerSelector::DynamicHeapSize(heap_min, mmtk_heap_max) + Ok(mode) if (mode == "fixed") => GCTriggerSelector::FixedHeapSize(heap_max), + Ok(_) | Err(_) => GCTriggerSelector::DynamicHeapSize(heap_min, heap_max) }; // Parse the env var, if it's not found set the plan name to MarkSweep |