Skip to content

save [stack, sp]function _save_stack疑问 #9

Description

@Qinch

_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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions