gcc (GCC) 4.6.0 c89
I have a signal handler declared like this:
/* Setup signal handler */
struct sigaction new_action;
new_action.sa_handler = g_signal_handler;
new_action.sa_flags = SA_ONSTACK;
if(sigaction(SIGINT, &new_action, NULL) == -1) {
fprintf(stderr, "Failed to setup sig开发者_C百科nal handlers.");
return -1;
}
When I was running my code through valgrind i.e. valgrind --leak-check=full
it picked up the following error:
==5206== Syscall param rt_sigaction(act->sa_mask) points to uninitialised byte(s)
==5206== at 0x347A435455: __libc_sigaction (in /lib64/libc-2.14.so)
So aftering looking at the man pages I decided to set like this, just to test with:
new_action.sa_mask = SA_NODEFER;
However, that just give me the following error:
error: incompatible types when assigning to type ‘__sigset_t’ from type ‘int’
Many thanks for any suggestions,
Try this:
/* Signals blocked during the execution of the handler. */
sigemptyset(&new_action.sa_mask);
sigaddset(&new_action.sa_mask, SIGINT);
The
sa_mask
field allows us to specify a set of signals that aren’t permitted to interrupt execution of this handler. In addition, the signal that caused the handler to be invoked is automatically added to the process signal mask.
精彩评论