diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-19 09:08:11 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-03-19 09:08:11 +0900 |
| commit | d7eb455cf3a2a4c72ee02fa2907718dd24413169 (patch) | |
| tree | 24cf8e0ad9d4bc6e5c8392e16ccd708cc1cb46b8 /mrbgems/mruby-fiber/src/fiber.c | |
| parent | 72c274473b0facbbca4dde732437924ee8752e99 (diff) | |
| parent | d9107fd157111ef1bdb39304534ec877fd815a83 (diff) | |
| download | mruby-d7eb455cf3a2a4c72ee02fa2907718dd24413169.tar.gz mruby-d7eb455cf3a2a4c72ee02fa2907718dd24413169.zip | |
Merge branch 'master' of github.com:mruby/mruby
Diffstat (limited to 'mrbgems/mruby-fiber/src/fiber.c')
| -rw-r--r-- | mrbgems/mruby-fiber/src/fiber.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c index 1a166f6f5..0a6e0cdd5 100644 --- a/mrbgems/mruby-fiber/src/fiber.c +++ b/mrbgems/mruby-fiber/src/fiber.c @@ -164,13 +164,14 @@ fiber_resume(mrb_state *mrb, mrb_value self) mrb_raise(mrb, E_ARGUMENT_ERROR, "can't cross C function boundary"); } } - if (c->status == MRB_FIBER_RUNNING || (mrb->c->prev && mrb->c->prev != mrb->root_c)) { + if (c->status == MRB_FIBER_RUNNING || c->status == MRB_FIBER_RESUMING) { mrb_raise(mrb, E_RUNTIME_ERROR, "double resume"); } if (c->status == MRB_FIBER_TERMINATED) { mrb_raise(mrb, E_RUNTIME_ERROR, "resuming dead fiber"); } mrb_get_args(mrb, "*", &a, &len); + mrb->c->status = MRB_FIBER_RESUMING; if (c->status == MRB_FIBER_CREATED) { mrb_value *b = c->stack+1; mrb_value *e = b + len; @@ -183,7 +184,6 @@ fiber_resume(mrb_state *mrb, mrb_value self) 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); - mrb->c->status = MRB_FIBER_SUSPENDED; c->status = MRB_FIBER_RUNNING; mrb->c = c; @@ -195,7 +195,6 @@ fiber_resume(mrb_state *mrb, mrb_value self) 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); - mrb->c->status = MRB_FIBER_SUSPENDED; c->status = MRB_FIBER_RUNNING; mrb->c = c; return fiber_result(mrb, a, len); |
