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

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   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.

RETURN VALUE

       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.

ERRORS

       ENOMEM Insufficient stack space left.

NOTES

       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.

CONFORMING TO

       SUSv2, POSIX 1003.1-2001.

SEE ALSO

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