diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-07-16 12:58:37 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-07-16 12:58:37 +0900 |
| commit | 2dcc2444fa7a6a332267fc4e06f487472133e0b0 (patch) | |
| tree | d1154584aca953268564210cb93d8db9c617977e /mrbgems/mruby-fiber | |
| parent | f8aac56df02f7106a87a6d8611e9cd8b5b9a4f2e (diff) | |
| download | mruby-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.c | 4 |
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); } |
