Skip to content

Commit c8b1f4c

Browse files
committed
Exit with error message if MMTK_HEAP_MODE is invalid
1 parent 65b34b5 commit c8b1f4c

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

gc/mmtk/src/api.rs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,20 @@ fn mmtk_builder_default_parse_heap_max() -> usize {
7777
size
7878
}
7979

80+
fn mmtk_builder_default_parse_heap_mode(heap_min: usize, heap_max: usize) -> GCTriggerSelector {
81+
let heap_mode_str = std::env::var("MMTK_HEAP_MODE")
82+
.unwrap_or("dynamic".to_string());
83+
84+
match heap_mode_str.as_str() {
85+
"fixed" => GCTriggerSelector::FixedHeapSize(heap_max),
86+
"dynamic" => GCTriggerSelector::DynamicHeapSize(heap_min, heap_max),
87+
_ => {
88+
eprintln!("[FATAL] Invalid MMTK_HEAP_MODE {}", heap_mode_str);
89+
std::process::exit(1);
90+
}
91+
}
92+
}
93+
8094
#[no_mangle]
8195
pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
8296
let mut builder = MMTKBuilder::new_no_env_vars();
@@ -96,10 +110,7 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
96110
std::process::exit(1);
97111
}
98112

99-
let mmtk_mode = match std::env::var("MMTK_HEAP_MODE") {
100-
Ok(mode) if (mode == "fixed") => GCTriggerSelector::FixedHeapSize(heap_max),
101-
Ok(_) | Err(_) => GCTriggerSelector::DynamicHeapSize(heap_min, heap_max)
102-
};
113+
let heap_mode = mmtk_builder_default_parse_heap_mode(heap_min, heap_max);
103114

104115
// Parse the env var, if it's not found set the plan name to MarkSweep
105116
let plan_name = std::env::var("MMTK_PLAN")
@@ -111,9 +122,7 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
111122

112123
builder.options.plan.set(plan_selector);
113124

114-
// Between 1MiB and 500MiB
115-
builder.options.gc_trigger.set(mmtk_mode);
116-
125+
builder.options.gc_trigger.set(heap_mode);
117126

118127
Box::into_raw(Box::new(builder))
119128
}

test/mmtk/test_configuration.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
require_relative "helper"
33
module MMTk
44
class TestConfiguration < TestCase
5-
%w(MMTK_THREADS MMTK_HEAP_MIN MMTK_HEAP_MAX).each do |var|
5+
%w(MMTK_THREADS MMTK_HEAP_MIN MMTK_HEAP_MAX MMTK_HEAP_MODE).each do |var|
66
define_method(:"test_invalid_#{var}") do
77
exit_code = assert_in_out_err(
88
[{ var => "foobar" }, "--"],

0 commit comments

Comments
 (0)