summaryrefslogtreecommitdiff
path: root/gc/mmtk
diff options
context:
space:
mode:
authorPeter Zhu <[email protected]>2025-01-13 14:08:27 -0500
committergit <[email protected]>2025-01-13 20:08:19 +0000
commit3b9b41d046ad032be73c253b0ebc17eb7de8b788 (patch)
treeec7b0538ba8095259cfd325699ba2c0fb06a4aa9 /gc/mmtk
parent7c0b92a1c64d39d4861fb7b46db7efdff3bbcf65 (diff)
[ruby/mmtk] Exit with error message if MMTK_THREADS is invalid
https://github.com/ruby/mmtk/commit/5c5c454f65
Diffstat (limited to 'gc/mmtk')
-rw-r--r--gc/mmtk/src/api.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/gc/mmtk/src/api.rs b/gc/mmtk/src/api.rs
index ae626a4a0f..bfa1eefa8e 100644
--- a/gc/mmtk/src/api.rs
+++ b/gc/mmtk/src/api.rs
@@ -37,6 +37,18 @@ pub extern "C" fn mmtk_is_reachable(object: ObjectReference) -> bool {
// =============== Bootup ===============
+fn mmtk_builder_default_parse_threads() -> usize {
+ let threads_str = std::env::var("MMTK_THREADS")
+ .unwrap_or("0".to_string());
+
+ threads_str
+ .parse::<usize>()
+ .unwrap_or_else(|_err| {
+ eprintln!("[FATAL] Invalid MMTK_THREADS {}", threads_str);
+ std::process::exit(1);
+ })
+}
+
#[no_mangle]
pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
let mut builder = MMTKBuilder::new_no_env_vars();
@@ -44,10 +56,10 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
const DEFAULT_HEAP_MIN: usize = 1 << 20;
- let mmtk_threads: usize = std::env::var("MMTK_THREADS")
- .unwrap_or("0".to_string())
- .parse::<usize>()
- .unwrap_or(0);
+ let threads = mmtk_builder_default_parse_threads();
+ if threads > 0 {
+ builder.options.threads.set(threads);
+ }
let mut mmtk_heap_min = match std::env::var("MMTK_HEAP_MIN") {
Ok(min) => {
@@ -95,9 +107,6 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
// Between 1MiB and 500MiB
builder.options.gc_trigger.set(mmtk_mode);
- if mmtk_threads > 0 {
- builder.options.threads.set(mmtk_threads);
- }
Box::into_raw(Box::new(builder))
}