From 5f7cdecdc9cf15293403955997e6e57ec94321a0 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 29 Nov 2017 20:25:55 +0900 Subject: Clear `c->prev` on fiber termination. --- src/vm.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index 84d80134e..502f85733 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1968,6 +1968,8 @@ RETRY_TRY_BLOCK: case OP_R_NORMAL: NORMAL_RETURN: if (ci == mrb->c->cibase) { + struct mrb_context *c; + if (!mrb->c->prev) { /* toplevel return */ localjump_error(mrb, LOCALJUMP_ERROR_RETURN); goto L_RAISE; @@ -1981,8 +1983,10 @@ RETRY_TRY_BLOCK: ecall(mrb); } /* automatic yield at the end */ - mrb->c->status = MRB_FIBER_TERMINATED; - mrb->c = mrb->c->prev; + c = mrb->c; + c->status = MRB_FIBER_TERMINATED; + mrb->c = c->prev; + c->prev = NULL; mrb->c->status = MRB_FIBER_RUNNING; ci = mrb->c->ci; } -- cgit v1.2.3