makecontext, swapcontext - manipulate user contexts
void makecontext (ucontext_t *ucp<b>, (void(*)())func<b>, int argc<b>,...);
int swapcontext (ucontext_t *oucp<b>, ucontext_t *ucp<b>);
These functions are useful for implementing user-level context switching
between multiple threads of control within a process.
makecontext modifies the context specified by ucp, which has been
initialized using getcontext; when this context is resumed using
swapcontext or setcontext [see getcontext(2)], program execution
continues by calling the function func, passing it the arguments that
follow argc in the makecontext call. Before a call is made to
makecontext, the context being modified should have a stack allocated for
it. The integer value of argc must match the number of arguments that
follow argc. Otherwise the behavior is undefined.
The uc_link field is used to determine the context that will be resumed
when the context being modified by makecontext returns. The uc_link field
should be initialized prior to the call to makecontext.
swapcontext saves the current context in the context structure pointed to
by oucp and sets the context to the context structure pointed to by ucp.
These functions will fail if either of the following is true:
ENOMEM ucp does not have enough stack left to complete the
EFAULT ucp or oucp points to an invalid address.
exit(2), getcontext(2), sigaction(2), sigprocmask(2), ucontext(5).
On successful completion, swapcontext return a value of zero. Otherwise,
a value of -1 is returned and errno is set to indicate the error.
Due to the procedure calling conventions on the MIPS processor and
restrictions of stdarg(5), the arguments that follow the argc parameter
for makecontext are restricted to longs and pointers only.
The size of the ucontext_t structure may change in future releases. To
remain binary compatible, users of these features must always use
makecontext or getcontext to create new instances of them.
PPPPaaaaggggeeee 2222 [ Back ]