Exemple #1
0
	void fiberEntry( transfer_t t ){
	
		Fiber *fiber=(Fiber*)t.data;
		
		fiber->fcontext2=t.fcontext;
		fiber->dbContext->init();
		fiber->gcFiber->link();
		
		setCurrFiber( fiber );
		
		fiber->gcFiber->entry();
		
		fiber->gcFiber->unlink();
		
		jump_fcontext( freeFiber( fiber ),nullptr );
	}
// This must be called under the same scheduler lock
// that added the thread to tDeadThread, we simply use
// the thread_local to pass it between fibers.
static void
checkDeadContext()
{
   auto coreId = cpu::this_core::id();
   auto deadContext = sDeadContext[coreId];

   if (deadContext) {
      sDeadContext[coreId] = nullptr;

      // Something broken if we are accidentally cleaning
      //  up currently active context...
      decaf_check(deadContext != sCurrentContext[coreId]);

      // Something is broken if we have no fiber
      decaf_check(deadContext->fiber);

      // Destroy the fiber
      freeFiber(deadContext->fiber);
      deadContext->fiber = nullptr;
   }
}