summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-03-01 12:58:31 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-03-01 12:58:31 +0900
commit8e170ce915626bb57ecad7e54d8fe207676d593e (patch)
tree9e0e4e01e68a7255c32f63bcc6df0a47e1bfe767 /src
parentbed4dcb1622051282cca55b2c92dec9058688d86 (diff)
downloadmruby-8e170ce915626bb57ecad7e54d8fe207676d593e.tar.gz
mruby-8e170ce915626bb57ecad7e54d8fe207676d593e.zip
exception in fiber should make resume to raise in parent fiber context; close #1765
Diffstat (limited to 'src')
-rw-r--r--src/vm.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/vm.c b/src/vm.c
index c113e67d7..8bf34b170 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1300,8 +1300,17 @@ mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int
}
else if (ci == mrb->c->cibase) {
if (ci->ridx == 0) {
- regs = mrb->c->stack = mrb->c->stbase;
- goto L_STOP;
+ if (mrb->c == mrb->root_c) {
+ regs = mrb->c->stack = mrb->c->stbase;
+ goto L_STOP;
+ }
+ else {
+ struct mrb_context *c = mrb->c;
+
+ mrb->c = c->prev;
+ c->prev = NULL;
+ goto L_RAISE;
+ }
}
break;
}