makecontext

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
MAKECONTEXT(3)		  Linux Programmer’s Manual	       MAKECONTEXT(3)



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(),	make-
       context()  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  setcon-
       text()  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 suc-
       cessor 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 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 direc-
       tion.

CONFORMING TO
       SUSv2, POSIX 1003.1-2001.

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



Linux 2.4			  2001-11-15		       MAKECONTEXT(3)