NAME
makecontext(), swapcontext() — manipulate user contexts; DEPRECATED
SYNOPSIS
#include <ucontext.h>
void makecontext(ucontext_t *ucp, (void *func)(), int argc, ...);
int swapcontext(ucontext_t *oucp, const ucontext_t *ucp);
Remarks
makecontext()
and
swapcontext()
are deprecated.
See the
WARNINGS
section.
DESCRIPTION
The
makecontext()
function modifies the context specified by
ucp,
which has been initialized using
getcontext().
When this context is resumed using
swapcontext()
or
setcontext(),
program execution continues by calling
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 value of
argc
must match the number of integer arguments passed to
func(),
otherwise the behavior is undefined.
The
uc_link
member is used to determine the context that will be resumed when
the context being modified by
makecontext()
returns.
The
uc_link
member should be initialized prior to the call to
makecontext().
The
swapcontext()
function saves the current context in the context structure
pointed to by
oucp
and sets the context to the context structure pointed to by
ucp.
RETURN VALUE
On successful completion,
swapcontext()
returns 0.
Otherwise, -1 is returned and
errno
is set to indicate the error.
WARNINGS
makecontext()
and
swapcontext()
are deprecated and should be used only by legacy applications.
Context APIs are not recommended due to possible compatibility
problems from release to release, because
context APIs are very architecture-specific.
The context APIs "expose" the architecture to the application, such
that the application may not be compatible with all releases.
If you must use context APIs, be aware of the following:
Do not copy the context yourself.
It is not contiguous.
The context may have pointers that may point back to the
original context rather than in the copied context; hence,
it will be broken.
The size of the context will vary in length from release to release.
ERRORS
The
makecontext()
and
swapcontext()
functions will fail if:
- ENOMEM
The
ucp
argument does not have enough stack left to complete the operation.