need to call write_barrier on every fiber context switch

This commit is contained in:
Yukihiro "Matz" Matsumoto
2014-07-16 12:58:37 +09:00
parent f8aac56df0
commit 2dcc2444fa
+3 -1
View File
@@ -279,7 +279,8 @@ fiber_transfer(mrb_state *mrb, mrb_value self)
mrb->c->status = MRB_FIBER_TRANSFERRED;
mrb->c = c;
c->status = MRB_FIBER_RUNNING;
MARK_CONTEXT_MODIFY(c);
MARK_CONTEXT_MODIFY(c);
mrb_write_barrier(mrb, (struct RBasic*)c->fib);
return fiber_result(mrb, a, len);
}
@@ -310,6 +311,7 @@ mrb_fiber_yield(mrb_state *mrb, mrb_int len, const mrb_value *a)
mrb->c = c->prev;
c->prev = NULL;
MARK_CONTEXT_MODIFY(mrb->c);
mrb_write_barrier(mrb, (struct RBasic*)c->fib);
return fiber_result(mrb, a, len);
}