Segfault in signal handler
From: Matt (m_at_m.net)
Date: 09/28/03
- Next message: Norm Dresner: "Re: Working dir -- no clue"
- Previous message: Michael C.: "Re: linux in local partition??"
- Next in thread: Ravi: "Re: Segfault in signal handler"
- Reply: Ravi: "Re: Segfault in signal handler"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Sun, 28 Sep 2003 04:13:58 GMT
It happens occasionally when CTRL-c myapp. But up to now, "skill TERM myapp"
will never fall into a segfault.
Below is my one and only signal handler, and what is :(possible) reason for
this?
TIA
-matt
//code snippet
void
sig_int(int signo)
{
if (g_signaled)
raise (signo);
g_signaled = 1;
keepgoing = 0;
g_signo = signo;
signal(SIGINT, SIG_DFL);
signal(SIGQUIT, SIG_DFL);
signal(SIGTERM, SIG_DFL);
signal(SIGBUS, SIG_DFL);
signal(SIGSEGV, SIG_DFL);
signal(SIGABRT, SIG_DFL);
signal(SIGFPE, SIG_DFL);
signal(SIGSYS, SIG_DFL);
signal(SIGXFSZ, SIG_DFL);
signal(SIGUSR1, SIG_DFL);
signal(SIGUSR2, SIG_DFL);
raise (signo);
}
///////// and here is what in "main"
...
signal(SIGPIPE, SIG_IGN);
sigemptyset(&mask);
sigemptyset(&oldmask);
install_handles(&mask);
sigprocmask (SIG_BLOCK, &mask, &oldmask);
while(keepgoing) {
sigsuspend(&oldmask);
}
app_clean();
signal_get(g_signo);
signal_notify(g_msg);
#ifdef NDEBUG
syslog(LOG_NOTICE, " %s", g_msg);
#endif
sleep(18);
sigprocmask (SIG_UNBLOCK, &mask, NULL);
...
///////
void install_handles( sigset_t *pmask)
{
struct sigaction new_act, old_act;
new_act.sa_handler = sig_int;
sigemptyset (&new_act.sa_mask);
new_act.sa_flags = 0;
sigaction (SIGINT, NULL, &old_act);
if (old_act.sa_handler != SIG_IGN) {
sigaction (SIGINT, &new_act, NULL);
sigaddset(pmask, SIGINT);
...
}
- Next message: Norm Dresner: "Re: Working dir -- no clue"
- Previous message: Michael C.: "Re: linux in local partition??"
- Next in thread: Ravi: "Re: Segfault in signal handler"
- Reply: Ravi: "Re: Segfault in signal handler"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]