diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-07-03 08:11:52 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-07-03 08:11:52 +0900 |
| commit | f452abd138be9a9fe581a745fb3e38a8e65687fa (patch) | |
| tree | 4b93a644b1f190445d4bb0fb31895c9268504187 /mrbgems/mruby-fiber | |
| parent | bcfcbc94bcf245f927601fa98cfd4a9e26548e25 (diff) | |
| download | mruby-f452abd138be9a9fe581a745fb3e38a8e65687fa.tar.gz mruby-f452abd138be9a9fe581a745fb3e38a8e65687fa.zip | |
fiber stack should not be cleared by zero when MRB_NAN_BOXING is set; close #2439
Diffstat (limited to 'mrbgems/mruby-fiber')
| -rw-r--r-- | mrbgems/mruby-fiber/src/fiber.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index 9bd15f4b6..07ae80293 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -8,6 +8,8 @@ #define FIBER_STACK_INIT_SIZE 64 #define FIBER_CI_INIT_SIZE 8 +#define SET_NIL_VALUE(r) MRB_SET_VALUE(r, MRB_TT_FALSE, value.i, 0) + /* * call-seq: * Fiber.new{...} -> obj @@ -85,10 +87,24 @@ fiber_init(mrb_state *mrb, mrb_value self) c = f->cxt; /* initialize VM stack */ - c->stbase = (mrb_value *)mrb_calloc(mrb, FIBER_STACK_INIT_SIZE, sizeof(mrb_value)); + c->stbase = (mrb_value *)mrb_malloc(mrb, FIBER_STACK_INIT_SIZE*sizeof(mrb_value)); c->stend = c->stbase + FIBER_STACK_INIT_SIZE; c->stack = c->stbase; +#ifdef MRB_NAN_BOXING + { + mrb_value *p = c->stbase; + mrb_value *pend = p + FIBER_STACK_INIT_SIZE; + + while (p < pend) { + SET_NIL_VALUE(*p); + p++; + } + } +#else + memset(c->stbase, 0, FIBER_STACK_INIT_SIZE * sizeof(mrb_value)); +#endif + /* copy receiver from a block */ c->stack[0] = mrb->c->stack[0]; |
