Skip to content

Commit 0dd0610

Browse files
committed
Use new API for setting MMTk options
Now mmtk-ruby provides several API functions to create MMTKBuilder and set options. We no longer need to temporarily set environment variables to set the MMTk plan.
1 parent cf8e768 commit 0dd0610

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

gc.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1877,20 +1877,17 @@ rb_objspace_alloc(void)
18771877

18781878
#if USE_MMTK
18791879
if (rb_mmtk_enabled_p()) {
1880-
if (!mmtk_env_plan && setenv("MMTK_PLAN", mmtk_chosen_plan, 0) != 0) {
1881-
fputs("[FATAL] could not set MMTK_PLAN\n", stderr);
1882-
exit(EXIT_FAILURE);
1883-
}
1880+
MMTk_Builder mmtk_builder = mmtk_builder_default();
1881+
1882+
mmtk_builder_set_plan(mmtk_builder, mmtk_chosen_plan);
18841883

18851884
// Note: the limit is currently broken for NoGC, but we still attempt to
18861885
// initialise it properly regardless.
18871886
// See https://github.com/mmtk/mmtk-core/issues/214
1888-
mmtk_init_binding(rb_mmtk_heap_limit(), &ruby_upcalls);
1887+
size_t heap_size = rb_mmtk_heap_limit();
1888+
mmtk_builder_set_heap_size(mmtk_builder, heap_size);
18891889

1890-
if (!mmtk_env_plan && unsetenv("MMTK_PLAN") != 0) {
1891-
fputs("[FATAL] could not unset MMTK_PLAN\n", stderr);
1892-
exit(EXIT_FAILURE);
1893-
}
1890+
mmtk_init_binding(mmtk_builder, &ruby_upcalls);
18941891
}
18951892
#endif
18961893

mmtk.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ extern "C" {
1313
#define MMTK_MIN_OBJ_ALIGN 8
1414
#define MMTK_OBJREF_OFFSET 8
1515

16+
typedef void* MMTk_Builder;
1617
typedef void* MMTk_Mutator;
1718
typedef void* MMTk_TraceLocal;
1819

@@ -38,10 +39,21 @@ typedef struct {
3839
void (*scan_object_ruby_style)(void *object);
3940
} RubyUpcalls;
4041

42+
/**
43+
* MMTK builder and options
44+
*/
45+
MMTk_Builder mmtk_builder_default();
46+
47+
void mmtk_builder_set_heap_size(MMTk_Builder builder, uintptr_t heap_size);
48+
49+
void mmtk_builder_set_plan(MMTk_Builder builder, const char *plan_name);
50+
51+
void mmtk_init_binding(MMTk_Builder builder, const RubyUpcalls *upcalls);
52+
4153
/**
4254
* Initialization
4355
*/
44-
extern void mmtk_init_binding(size_t heap_size, RubyUpcalls *ruby_upcalls);
56+
extern void mmtk_init_binding(MMTk_Builder builder, const RubyUpcalls *upcalls);
4557
extern void mmtk_initialize_collection(void *tls);
4658
extern void mmtk_enable_collection();
4759

0 commit comments

Comments
 (0)