Skip to content

Commit 6a78ffa

Browse files
committed
Add mmtk_heap_max to GC.config
1 parent 5bbac70 commit 6a78ffa

File tree

4 files changed

+18
-0
lines changed

4 files changed

+18
-0
lines changed

gc/mmtk/mmtk.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,7 @@ rb_gc_impl_config_get(void *objspace_ptr)
637637
rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_heap_mode")), rb_str_new_cstr((const char *)mmtk_heap_mode()));
638638
size_t heap_min = mmtk_heap_min();
639639
if (heap_min > 0) rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_heap_min")), RB_ULONG2NUM(heap_min));
640+
rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_heap_max")), RB_ULONG2NUM(mmtk_heap_max()));
640641

641642
return hash;
642643
}

gc/mmtk/mmtk.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ const uint8_t *mmtk_heap_mode(void);
153153

154154
size_t mmtk_heap_min(void);
155155

156+
size_t mmtk_heap_max(void);
157+
156158
bool mmtk_is_mmtk_object(MMTk_Address addr);
157159

158160
#endif /* MMTK_H */

gc/mmtk/src/api.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,15 @@ pub extern "C" fn mmtk_heap_min() -> usize {
368368
}
369369
}
370370

371+
#[no_mangle]
372+
pub extern "C" fn mmtk_heap_max() -> usize {
373+
match *crate::BINDING.get().unwrap().mmtk.get_options().gc_trigger {
374+
GCTriggerSelector::FixedHeapSize(max_size) => max_size,
375+
GCTriggerSelector::DynamicHeapSize(_, max_size) => max_size,
376+
_ => panic!("Unknown heap mode")
377+
}
378+
}
379+
371380
// =============== Miscellaneous ===============
372381

373382
#[no_mangle]

test/mmtk/test_configuration.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ def test_MMTK_HEAP_MIN
3939
RUBY
4040
end
4141

42+
def test_MMTK_HEAP_MAX
43+
assert_separately([{ "MMTK_HEAP_MODE" => "fixed", "MMTK_HEAP_MAX" => "100MiB" }], <<~RUBY)
44+
assert_equal(100 * 1024 * 1024, GC.config[:mmtk_heap_max])
45+
RUBY
46+
end
47+
4248
%w(MMTK_THREADS MMTK_HEAP_MIN MMTK_HEAP_MAX MMTK_HEAP_MODE MMTK_PLAN).each do |var|
4349
define_method(:"test_invalid_#{var}") do
4450
exit_code = assert_in_out_err(

0 commit comments

Comments
 (0)