summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-08-04 22:53:17 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-08-04 22:53:17 +0900
commit6dc8c2948b138e31d388f460406fcb3c4acab058 (patch)
treeb4f5c3c7cf053da6c84ff18c10d93531240c45c7
parentea814600c2291b446a0717568bc179d6354b0bd0 (diff)
downloadmruby-6dc8c2948b138e31d388f460406fcb3c4acab058.tar.gz
mruby-6dc8c2948b138e31d388f460406fcb3c4acab058.zip
should protect resume fiber by write barrier; close #1434
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c
index d5855caa3..bd9abe125 100644
--- a/mrbgems/mruby-fiber/src/fiber.c
+++ b/mrbgems/mruby-fiber/src/fiber.c
@@ -173,6 +173,7 @@ fiber_resume(mrb_state *mrb, mrb_value self)
c->prev = mrb->c;
if (c->prev->fib)
mrb_field_write_barrier(mrb, (struct RBasic*)c->fib, (struct RBasic*)c->prev->fib);
+ mrb_write_barrier(mrb, (struct RBasic*)c->fib);
c->status = MRB_FIBER_RUNNING;
mrb->c = c;
@@ -183,6 +184,7 @@ fiber_resume(mrb_state *mrb, mrb_value self)
c->prev = mrb->c;
if (c->prev->fib)
mrb_field_write_barrier(mrb, (struct RBasic*)c->fib, (struct RBasic*)c->prev->fib);
+ mrb_write_barrier(mrb, (struct RBasic*)c->fib);
c->status = MRB_FIBER_RUNNING;
mrb->c = c;
return fiber_result(mrb, a, len);