Provided by: manpages-dev_2.17-1_all bug


       makecontext, swapcontext - manipulate user context


       #include <ucontext.h>

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


       In  a  SysV-like  environment,  one  has the type ucontext_t defined in
       <ucontext.h>  and  the  four  functions   getcontext(),   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 getcontext(2).

       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.


       When successful, 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, swapcontext() returns -1 and  sets
       -1 errno appropriately.


       ENOMEM Insufficient stack space left.


       The  interpretation  of  ucp->uc_stack  is  just  as in sigaltstack(2),
       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.


       SUSv2, POSIX 1003.1-2001.


       getcontext(2),     sigaction(2),     sigaltstack(2),    sigprocmask(2),