Skip to content

Commit 79ce200

Browse files
committedJan 14, 2025·
Exit with error message if MMTK_PLAN is invalid
1 parent c8b1f4c commit 79ce200

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed
 

‎.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"rust-analyzer.linkedProjects": [
3+
"gc/mmtk/Cargo.toml"
4+
],
5+
}

‎gc/mmtk/src/api.rs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,21 @@ fn mmtk_builder_default_parse_heap_mode(heap_min: usize, heap_max: usize) -> GCT
9191
}
9292
}
9393

94+
fn mmtk_builder_default_parse_plan() -> PlanSelector {
95+
let plan_str = std::env::var("MMTK_PLAN")
96+
.unwrap_or("MarkSweep".to_string());
97+
98+
match plan_str.as_str() {
99+
"NoGC" => PlanSelector::NoGC,
100+
"MarkSweep" => PlanSelector::MarkSweep,
101+
"Immix" => PlanSelector::Immix,
102+
_ => {
103+
eprintln!("[FATAL] Invalid MMTK_PLAN {}", plan_str);
104+
std::process::exit(1);
105+
}
106+
}
107+
}
108+
94109
#[no_mangle]
95110
pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
96111
let mut builder = MMTKBuilder::new_no_env_vars();
@@ -110,19 +125,9 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
110125
std::process::exit(1);
111126
}
112127

113-
let heap_mode = mmtk_builder_default_parse_heap_mode(heap_min, heap_max);
114-
115-
// Parse the env var, if it's not found set the plan name to MarkSweep
116-
let plan_name = std::env::var("MMTK_PLAN")
117-
.unwrap_or(String::from("MarkSweep"));
118-
119-
// Parse the plan name into a valid MMTK Plan, if the name is not a valid plan use MarkSweep
120-
let plan_selector = plan_name.parse::<PlanSelector>()
121-
.unwrap_or("MarkSweep".parse::<PlanSelector>().unwrap());
122-
123-
builder.options.plan.set(plan_selector);
128+
builder.options.gc_trigger.set(mmtk_builder_default_parse_heap_mode(heap_min, heap_max));
124129

125-
builder.options.gc_trigger.set(heap_mode);
130+
builder.options.plan.set(mmtk_builder_default_parse_plan());
126131

127132
Box::into_raw(Box::new(builder))
128133
}

‎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 MMTK_HEAP_MODE).each do |var|
5+
%w(MMTK_THREADS MMTK_HEAP_MIN MMTK_HEAP_MAX MMTK_HEAP_MODE MMTK_PLAN).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)
Please sign in to comment.