diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-06-15 23:20:36 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-06-15 23:20:36 +0900 |
| commit | ebd6636a1e90dd12cb0ef112e7f1e0ca511f5d3b (patch) | |
| tree | 5513518a6871e9230a0ffc8d850234b8e11a46a6 /src/vm.c | |
| parent | d7e09ffa5f890f7508da7d3cf82f3d0285d033ca (diff) | |
| download | mruby-ebd6636a1e90dd12cb0ef112e7f1e0ca511f5d3b.tar.gz mruby-ebd6636a1e90dd12cb0ef112e7f1e0ca511f5d3b.zip | |
Call write barriers for stack-modified fibers; fix #3699
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -867,7 +867,12 @@ mrb_vm_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stac if (c->ci - c->cibase > cioff) { c->ci = c->cibase + cioff; } - mrb->c = c; + if (mrb->c != c) { + if (mrb->c->fib) { + mrb_write_barrier(mrb, (struct RBasic*)mrb->c->fib); + } + mrb->c = c; + } return result; } @@ -1819,6 +1824,9 @@ RETRY_TRY_BLOCK: else { struct mrb_context *c = mrb->c; + if (c->fib) { + mrb_write_barrier(mrb, (struct RBasic*)c->fib); + } mrb->c = c->prev; c->prev = NULL; goto L_RAISE; |
