fix fiber GC problem

parent 9ea1155c
......@@ -171,6 +171,8 @@ fiber_resume(mrb_state *mrb, mrb_value self)
}
c->cibase->argc = len;
c->prev = mrb->c;
if (c->prev->fib)
mrb_field_write_barrier(mrb, (struct RBasic*)c->fib, (struct RBasic*)c->prev->fib);
c->status = MRB_FIBER_RUNNING;
mrb->c = c;
......@@ -179,6 +181,8 @@ fiber_resume(mrb_state *mrb, mrb_value self)
}
MARK_CONTEXT_MODIFY(c);
c->prev = mrb->c;
if (c->prev->fib)
mrb_field_write_barrier(mrb, (struct RBasic*)c->fib, (struct RBasic*)c->prev->fib);
c->status = MRB_FIBER_RUNNING;
mrb->c = c;
return fiber_result(mrb, a, len);
......
......@@ -623,7 +623,7 @@ root_scan_phase(mrb_state *mrb)
/* mark exception */
mrb_gc_mark(mrb, (struct RBasic*)mrb->exc);
mark_context(mrb, mrb->c);
mark_context(mrb, mrb->root_c);
/* mark irep pool */
if (mrb->irep) {
size_t len = mrb->irep_len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment