makecontext,
MAKECONTEXT(T)      Linux Programmer's Manual      MAKECONTEXT(T)



NAME
       makecontext, swapcontext - manipulate user context

SYNOPSIS
       #include <ucontext.h>

       void  makecontext(ucontext_t *ucp, void *func(), int argc,
       ...);
       int swapcontext (ucontext_t *oucp, ucontext_t *ucp);

DESCRIPTION
       In a SysV-like environment, one has  the  type  ucontext_t
       defined  in  <ucontext.h>  and  the four functions getcon-
       text(), setcontext(), makecontext() and swapcontext() that
       allow   user-level   context  switching  between  multiple
       threads of control within a process.

       For the type and the  first  two  functions,  see  getcon-
       text(t).

       The makecontext() function modifies the context pointed to
       by ucp (which was obtained from a call  to  getcontext()).
       Before  calling  makecontext(),  one should allocate a new
       stack for this context, assigning  to  ucp->uc_stack,  and
       define  a  successor  context,  assigning to ucp->uc_link.
       When this context is later activated  (using  setcontext()
       or  swapcontext()) then first the function func is called,
       with the arguments specified following  argc  (where  argc
       must contain the number of these arguments), and when this
       function returns, the successor context is activated. When
       the successor context pointer is NULL, the thread exits.

       The  swapcontext()  function  saves the current context in
       the structure pointed to by oucp, and then  activates  the
       context pointed to by ucp.

RETURN VALUE
       When successful, makecontext() returns 0 and swapcontext()
       does not return. (But we may return later, in case oucp is
       activated,  in  which  case  it  looks  like swapcontext()
       returns 0.)  On error, both return -1 and set errno appro-
       priately.

ERRORS
       ENOMEM Insufficient stack space left.

NOTES
       The  interpretation of ucp->uc_stack is just as in sigalt-
       stack(k), namely, this struct contains start and length of
       a  memory  area  to  be  used  as stack, regardless of the
       direction of growth of the stack. So, it is not  necessary
       for the user program to worry about this direction.

CONFORMING TO
       SUSv2, POSIX 1003.1-2001.

SEE ALSO
       getcontext(t),   sigaction(n),   sigaltstack(k),  sigproc-
       mask(k), sigsetjmp(p)



Linux 2.4                   2001-11-15             MAKECONTEXT(T)