Ejemplo n.º 1
0
Archivo: Coro.c Proyecto: cdcarter/io
void Coro_startCoro_(Coro *self, Coro *other, void *context, CoroStartCallback *callback)
{
	globalCallbackBlock.context = context;
	globalCallbackBlock.func    = callback;
	Coro_allocStackIfNeeded(other);
	Coro_setup(other, &globalCallbackBlock);
	Coro_switchTo_(self, other);
}
Ejemplo n.º 2
0
Archivo: Coro.c Proyecto: doublec/io
void Coro_startCoro_(Coro *self, Coro *other, void *context, CoroStartCallback *callback)
{
	CallbackBlock sblock;
	CallbackBlock *block = &sblock;
	//CallbackBlock *block = malloc(sizeof(CallbackBlock)); // memory leak
	block->context = context;
	block->func    = callback;
	
	Coro_allocStackIfNeeded(other);
	Coro_setup(other, block);
	Coro_switchTo_(self, other);
}
Ejemplo n.º 3
0
Archivo: Coro.c Proyecto: asymmetric/io
void Coro_startCoro_(Coro *self, Coro *other, void *context, CoroStartCallback *callback)
{
	CallbackBlock sblock;
	CallbackBlock *block = &sblock;
	//CallbackBlock *block = malloc(sizeof(CallbackBlock)); // memory leak
	block->context = context;
	block->func    = callback;

#ifdef USE_FIBERS
        block->associatedCoro = other;
#else
	Coro_allocStackIfNeeded(other);
#endif
	Coro_setup(other, block);
	Coro_switchTo_(self, other);
}
Ejemplo n.º 4
0
Archivo: IoCoroutine.c Proyecto: jdp/io
IoObject *IoCoroutine_rawResume(IoCoroutine *self)
{
	if(DATA(self)->cid)
	{
		IoCoroutine *current = IoState_currentCoroutine(IOSTATE);
		IoState_setCurrentCoroutine_(IOSTATE, self);
		//printf("IoCoroutine resuming %p\n", (void *)self);
		Coro_switchTo_(IoCoroutine_rawCoro(current), IoCoroutine_rawCoro(self));

		//IoState_setCurrentCoroutine_(IOSTATE, current);
	}
	else
	{
		//printf("IoCoroutine_rawResume: can't resume coro that hasn't been run - so running it\n");
		IoCoroutine_rawRun(self);
	}

	return self;
}