小编Joh*_*cke的帖子

使用带有SIG_INFO的sigaction处理程序的第三个参数(void*context)会导致分段错误

我已经减少了一个巨大的光纤调度程序代码,该代码产生了以下几行的问题.
我期望的是每次都清理地返回上下文,传递给处理程序.
我得到的是"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(&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,&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.

c gcc signals handler ucontext

7
推荐指数
1
解决办法
4510
查看次数

标签 统计

c ×1

gcc ×1

handler ×1

signals ×1

ucontext ×1