-
Notifications
You must be signed in to change notification settings - Fork 687
Open
Description
_save_stack函数中dummy变量定义在coroutine_yield是不是更好?
static void
_save_stack(struct coroutine *C, char *top, char *bottom) {
//top:stack bottom:sp
assert(top - bottom <= STACK_SIZE);
if (C->cap < top - bottom) {
free(C->stack);
C->cap = top-bottom;
C->stack = malloc(C->cap);
}
C->size = top - bottom;
memcpy(C->stack, bottom, C->size);
}
void
coroutine_yield(struct schedule * S) {
int id = S->running;
assert(id >= 0);
struct coroutine * C = S->co[id];
assert((char *)&C > S->stack);
char dummy = 0;
_save_stack(C,S->stack + STACK_SIZE, &dummy);
C->status = COROUTINE_SUSPEND;
S->running = -1;
swapcontext(&C->ctx , &S->main);
}Metadata
Metadata
Assignees
Labels
No labels