diff options
author | Nicholas Noll <nbnoll@eml.cc> | 2020-04-19 09:23:31 -0700 |
---|---|---|
committer | Nicholas Noll <nbnoll@eml.cc> | 2020-04-19 09:23:31 -0700 |
commit | 60ce7fba21a6d37c0acbe152039fbc3d0e692bf0 (patch) | |
tree | 73fa0295dace25c23a00f4ec4e654b4f4fb85619 /src/coro.c | |
parent | 1ae9a10d56fca8fe585e77533c49e5c9d680ff12 (diff) |
chore: reorganized structure to allow for more parallel projects
Diffstat (limited to 'src/coro.c')
-rw-r--r-- | src/coro.c | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/src/coro.c b/src/coro.c deleted file mode 100644 index af0a359..0000000 --- a/src/coro.c +++ /dev/null @@ -1,65 +0,0 @@ -#include <u.h> - -// ----------------------------------------------------------------------- -// Assembly routines - -extern void _newcoro(coro *co, uintptr (*func)(coro*, uintptr), void *stk); -extern uintptr _coroyield(coro *co, uintptr arg); - -// ----------------------------------------------------------------------- -// Globals - -// static thread_local coro *CONTEXT; - -// ----------------------------------------------------------------------- -// C interface - -/* Co-routine context */ -struct coro -{ - void* sp; - void* bp; - uintptr size; - void* user; -}; - -coro* -coro·new(uintptr stk, uintptr (*func)(coro*, uintptr)) -{ - if (!func) return nil; - if (stk == 0) stk = 8192; - - byte *block = malloc(stk); - coro *co = (coro*)&block[stk - sizeof(coro)]; - co->bp = block; - co->size = stk; - - _newcoro(co, func, co); - return co; -} - -error -coro·free(coro *co) -{ - enum - { - NIL, - GOOD, - EMPTY, - LOST, - }; - - if (!co) return NIL; - if (!co->bp) return LOST; - if (co->size == 0) return EMPTY; - - free(co->bp); - - return GOOD; -} - -uintptr -coro·yield(coro *c, uintptr arg) -{ - return _coroyield(c, arg); -} |