From a44cc14e1c0eadcd823b6e91c54948dcb273c174 Mon Sep 17 00:00:00 2001 From: h2so5 Date: Thu, 2 Jan 2014 18:23:26 +0900 Subject: Fix extended arena check in gc_protect --- src/gc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gc.c b/src/gc.c index 5592b48f1..5168eccf8 100644 --- a/src/gc.c +++ b/src/gc.c @@ -370,17 +370,19 @@ mrb_free_heap(mrb_state *mrb) static void gc_protect(mrb_state *mrb, struct RBasic *p) { - if (mrb->arena_idx >= MRB_GC_ARENA_SIZE) { #ifdef MRB_GC_FIXED_ARENA + if (mrb->arena_idx >= MRB_GC_ARENA_SIZE) { /* arena overflow error */ mrb->arena_idx = MRB_GC_ARENA_SIZE - 4; /* force room in arena */ mrb_raise(mrb, E_RUNTIME_ERROR, "arena overflow error"); + } #else + if (mrb->arena_idx >= mrb->arena_capa) { /* extend arena */ mrb->arena_capa *= 1.5; mrb->arena = (struct RBasic**)mrb_realloc(mrb, mrb->arena, sizeof(struct RBasic*)*mrb->arena_capa); -#endif } +#endif mrb->arena[mrb->arena_idx++] = p; } -- cgit v1.2.3