Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       getcontext, setcontext - get and set current user context

SYNOPSIS

       #include <ucontext.h>

       int getcontext(ucontext_t *ucp);
       int setcontext(const ucontext_t *ucp);

DESCRIPTION

       The getcontext() function shall initialize the structure pointed to by ucp to the current user context of
       the  calling  thread.  The  ucontext_t  type that ucp points to defines the user context and includes the
       contents of the calling thread's machine registers, the signal mask, and the current execution stack.

       The setcontext() function shall restore the user  context  pointed  to  by  ucp.  A  successful  call  to
       setcontext()  shall  not  return;  program  execution  resumes at the point specified by the ucp argument
       passed to setcontext(). The ucp argument should be created either by a  prior  call  to  getcontext()  or
       makecontext(),  or  by  being  passed as an argument to a signal handler. If the ucp argument was created
       with getcontext(), program execution continues as if the corresponding  call  of  getcontext()  had  just
       returned.  If  the  ucp  argument  was  created  with makecontext(), program execution continues with the
       function passed to makecontext().  When that function returns, the thread shall continue as  if  after  a
       call  to setcontext() with the ucp argument that was input to makecontext(). If the uc_link member of the
       ucontext_t structure pointed to by the ucp argument is equal to 0, then this context is the main context,
       and the thread shall exit when this context returns. The effects of passing a ucp argument obtained  from
       any other source are unspecified.

RETURN VALUE

       Upon  successful  completion, setcontext() shall not return and getcontext() shall return 0; otherwise, a
       value of -1 shall be returned.

ERRORS

       No errors are defined.

       The following sections are informative.

EXAMPLES

       Refer to makecontext() .

APPLICATION USAGE

       When a signal handler is executed, the current user context is saved and a new context is created. If the
       thread leaves the signal handler via longjmp(), then it is unspecified whether the context at the time of
       the corresponding setjmp() call is restored and thus whether future  calls  to  getcontext()  provide  an
       accurate  representation  of  the  current  context,  since  the  context  restored by longjmp() does not
       necessarily  contain  all  the  information  that  setcontext()  requires.  Signal  handlers  should  use
       siglongjmp() or setcontext() instead.

       Conforming  applications  should  not modify or access the uc_mcontext member of ucontext_t. A conforming
       application cannot assume that context includes any process-wide static data, possibly  including  errno.
       Users manipulating contexts should take care to handle these explicitly when required.

       Use of contexts to create alternate stacks is not defined by this volume of IEEE Std 1003.1-2001.

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       bsd_signal()  ,  makecontext()  ,  setcontext() , setjmp() , sigaction() , sigaltstack() , siglongjmp() ,
       sigprocmask() , sigsetjmp() , the Base Definitions volume of IEEE Std 1003.1-2001, <ucontext.h>

COPYRIGHT

       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition,
       Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open  Group  Base
       Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics Engineers,
       Inc  and  The  Open Group. In the event of any discrepancy between this version and the original IEEE and
       The Open Group Standard, the original IEEE and The Open Group  Standard  is  the  referee  document.  The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

IEEE/The Open Group                                   2003                                         GETCONTEXT(P)