diff options
| author | Yukihiro Matz Matsumoto <[email protected]> | 2013-02-10 23:54:57 +0900 |
|---|---|---|
| committer | Yukihiro Matz Matsumoto <[email protected]> | 2013-02-10 23:54:57 +0900 |
| commit | 75ae568236d1b634f48c7922b1416618181c4bf7 (patch) | |
| tree | 03e9854abbe8058c75a3005eb6fc3ad5ff0c9ee7 /src | |
| parent | 06c06d5c36814e8e5321923fa2e0483e6ea9abc5 (diff) | |
| download | mruby-75ae568236d1b634f48c7922b1416618181c4bf7.tar.gz mruby-75ae568236d1b634f48c7922b1416618181c4bf7.zip | |
should adjust stack size when irep->nregs is larger than allocate size; close #835
Diffstat (limited to 'src')
| -rw-r--r-- | src/vm.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -108,6 +108,9 @@ stack_extend(mrb_state *mrb, int room, int keep) size = mrb->stend - mrb->stbase; off = mrb->stack - mrb->stbase; + /* do not leave uninitialized malloc region */ + if (keep > size) keep = size; + /* Use linear stack growth. It is slightly slower than doubling thestack space, but it saves memory on small devices. */ @@ -554,6 +557,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) if (!mrb->stack) { stack_init(mrb); } + stack_extend(mrb, irep->nregs, irep->nregs); mrb->ci->proc = proc; mrb->ci->nregs = irep->nregs + 2; regs = mrb->stack; |
