summaryrefslogtreecommitdiff
path: root/gc/mmtk/src
diff options
context:
space:
mode:
authorPeter Zhu <[email protected]>2025-01-13 15:06:20 -0500
committergit <[email protected]>2025-01-13 20:08:20 +0000
commited4b1f9c1acac821e27d440d2bbb6837b59a7470 (patch)
tree1601eaa980a6741f953cb6fdbcbf5a83e7fa4a13 /gc/mmtk/src
parentf821a127eab4a4583f4b6336ec7ff0a1dc6d6569 (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.rs32
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