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); }
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); }
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); }
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; }