Make fibers create/destroy on thread entry/exit.

Closes #20.
This commit is contained in:
James Benton
2015-07-30 21:46:36 +01:00
parent 68df5e3eb7
commit eeaa87226a
4 changed files with 57 additions and 24 deletions

View File

@@ -106,11 +106,13 @@ Processor::fiberEntryPoint(Fiber *fiber)
void
Processor::exit()
{
// Return to parent fiber
// Destroy current fiber and return to parent fiber
auto core = tCurrentCore;
auto fiber = tCurrentCore->currentFiber;
auto parent = fiber->parentFiber;
gLog->trace("Core {} exit thread {}", core->id, fiber->thread->id);
SwitchToFiber(fiber->parentFiber);
destroyFiber(fiber);
SwitchToFiber(parent);
}
void
@@ -199,6 +201,17 @@ Processor::createFiber()
return fiber;
}
void
Processor::destroyFiber(Fiber *fiber)
{
if (fiber->thread) {
assert(fiber->thread->fiber);
}
mFiberList.erase(std::remove(mFiberList.begin(), mFiberList.end(), fiber), mFiberList.end());
delete fiber;
}
Fiber *
Processor::getCurrentFiber()
{