我已经减少了一个巨大的光纤调度程序代码,该代码产生了以下几行的问题.
我期望的是每次都清理地返回上下文,传递给处理程序.
我得到的是"Handler."打印出三次,然后是分段错误.
#include <ucontext.h>
#include <signal.h>
#include <stdio.h>
ucontext_t currently_executed_context;
void handler_sigusr1(int signum, siginfo_t* siginfo, void* context)
{
currently_executed_context = (*(ucontext_t*)context);
printf("Handler. ");
setcontext(¤tly_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,&action_handler,NULL);
for(;;) { kill(getpid(),SIGUSR1); sleep(1); }
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在两个不同的Linux发行版上使用gcc-4.4.3和gcc-4.4.5.