fix fiber GC problem

This commit is contained in:
Yukihiro "Matz" Matsumoto
2013-05-26 00:37:44 +09:00
parent 9ea1155c98
commit d78f23d28b
2 changed files with 5 additions and 1 deletions
+4
View File
@@ -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);
+1 -1
View File
@@ -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;