title: Using the third parameter (void* context) of a sigaction handler with SIG_INFO results in a Segmentation Fault
body: <p>I have reduced a huge fiber scheduler code that was producing the problem to the lines below.<br>
  What I expect is a clean return to the context, passed to the handler, every time.<br>
  What I get is "Handler. " printed out three times and then a Segmentation Fault.</p>
  
  <pre><code>#include &lt;ucontext.h&gt;
  #include &lt;signal.h&gt;
  #include &lt;stdio.h&gt;
  
  ucontext_t currently_executed_context;
  
  void handler_sigusr1(int signum, siginfo_t* siginfo, void* context)
  {
      currently_executed_context = (*(ucontext_t*)context);
  
      printf("Handler. ");
      setcontext(&amp;currently_executed_context);
  }
  
  int main()
  {
      setbuf(stdout,0);
  
      struct sigaction action_handler;
  
      action_handler.sa_sigaction = handler_sigusr1;
      action_handler.sa_flags = SA_SIGINFO;
  
      sigaction(SIGUSR1,&amp;action_handler,NULL);
  
      for(;;) { kill(getpid(),SIGUSR1); sleep(1); }
  
      return 0;
  }
  </code></pre>
  
  <p>Used both gcc-4.4.3 and gcc-4.4.5 on two different Linux distributions.</p>