diff --git a/src/fiber.cc b/src/fiber.cc index c396d240e5b38514e8b6e44d45044c8ffc6df88b..9e688840f2b1fabe60e9b58965c7774a7d78456f 100644 --- a/src/fiber.cc +++ b/src/fiber.cc @@ -207,7 +207,6 @@ fiber_yield(void) coro_transfer(&caller->coro.ctx, &callee->coro.ctx); } - struct fiber_watcher_data { struct fiber *f; bool timed_out; @@ -320,9 +319,8 @@ fiber_gc(void) */ static void -fiber_zombificate() +fiber_zombificate(struct fiber *fiber) { - struct fiber *fiber = fiber(); fiber_schedule_list(&fiber->wake); rlist_del(&fiber->state); /* safety */ fiber_set_name(fiber, "zombie"); @@ -341,26 +339,27 @@ static void fiber_loop(void *data __attribute__((unused))) { for (;;) { - assert(fiber() != NULL && fiber()->f != NULL && - fiber()->fid != 0); + struct fiber *fiber = fiber(); + + assert(fiber != NULL && fiber->f != NULL && fiber->fid != 0); try { - fiber()->f(fiber()->f_data); + fiber->f(fiber->f_data); } catch (FiberCancelException *e) { say_info("fiber `%s' has been cancelled", - fiber_name(fiber())); - say_info("fiber `%s': exiting", fiber_name(fiber())); + fiber_name(fiber)); + say_info("fiber `%s': exiting", fiber_name(fiber)); } catch (Exception *e) { e->log(); } catch (...) { /* This can only happen in case of a server bug. */ say_error("fiber `%s': unknown exception", - fiber_name(fiber())); - panic("fiber `%s': exiting", fiber_name(fiber())); + fiber_name(fiber)); + panic("fiber `%s': exiting", fiber_name(fiber)); } /** By convention, these triggers must not throw. */ - if (! rlist_empty(&fiber()->on_stop)) - trigger_run(&fiber()->on_stop, NULL); - fiber_zombificate(); + if (! rlist_empty(&fiber->on_stop)) + trigger_run(&fiber->on_stop, NULL); + fiber_zombificate(fiber); fiber_yield(); /* give control back to scheduler */ } }