summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-fiber
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-07-16 12:58:37 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-07-16 12:58:37 +0900
commit2dcc2444fa7a6a332267fc4e06f487472133e0b0 (patch)
treed1154584aca953268564210cb93d8db9c617977e /mrbgems/mruby-fiber
parentf8aac56df02f7106a87a6d8611e9cd8b5b9a4f2e (diff)
downloadmruby-2dcc2444fa7a6a332267fc4e06f487472133e0b0.tar.gz
mruby-2dcc2444fa7a6a332267fc4e06f487472133e0b0.zip
need to call write_barrier on every fiber context switch
Diffstat (limited to 'mrbgems/mruby-fiber')
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c
index 6823ebe2a..824a564f6 100644
--- a/mrbgems/mruby-fiber/src/fiber.c
+++ b/mrbgems/mruby-fiber/src/fiber.c
@@ -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);
}