Small refactoring in `fiber.c`.

parent 5cd52d2d
...@@ -191,14 +191,21 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr ...@@ -191,14 +191,21 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
fiber_check_cfunc(mrb, c); fiber_check_cfunc(mrb, c);
status = c->status; status = c->status;
if (resume && status == MRB_FIBER_TRANSFERRED) { switch (status) {
mrb_raise(mrb, E_FIBER_ERROR, "resuming transferred fiber"); case MRB_FIBER_TRANSFERRED:
} if (resume) {
if (status == MRB_FIBER_RUNNING || status == MRB_FIBER_RESUMED) { mrb_raise(mrb, E_FIBER_ERROR, "resuming transferred fiber");
}
break;
case MRB_FIBER_RUNNING:
case MRB_FIBER_RESUMED:
mrb_raise(mrb, E_FIBER_ERROR, "double resume"); mrb_raise(mrb, E_FIBER_ERROR, "double resume");
} break;
if (status == MRB_FIBER_TERMINATED) { case MRB_FIBER_TERMINATED:
mrb_raise(mrb, E_FIBER_ERROR, "resuming dead fiber"); mrb_raise(mrb, E_FIBER_ERROR, "resuming dead fiber");
break;
default:
break;
} }
old_c->status = resume ? MRB_FIBER_RESUMED : MRB_FIBER_TRANSFERRED; old_c->status = resume ? MRB_FIBER_RESUMED : MRB_FIBER_TRANSFERRED;
c->prev = resume ? mrb->c : (c->prev ? c->prev : mrb->root_c); c->prev = resume ? mrb->c : (c->prev ? c->prev : mrb->root_c);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment