abort?

Remko Lodder remko at FreeBSD.org
Sun Feb 10 11:01:05 UTC 2008


Cihan Kömeçoğlu wrote:
> Hello list
> 
> I cant understand why kill function is called two times to send
> sigabort signal. One signal to send is enough, isn't it?
> 
> Thanks
> 
> 
> 
> void
> abort(void)         /* POSIX-style abort() function */
> {
>     sigset_t           mask;
>     struct sigaction   action;
> 
>     /*
>      * Caller can't ignore SIGABRT, if so reset to default.
>      */
>     sigaction(SIGABRT, NULL, &action);
>     if (action.sa_handler == SIG_IGN) {
>         action.sa_handler = SIG_DFL;
>         sigaction(SIGABRT, &action, NULL);
>     }
>     if (action.sa_handler == SIG_DFL)
>         fflush(NULL);           /* flush all open stdio streams */
> 
>     /*
>      * Caller can't block SIGABRT; make sure it's unblocked.
>      */
>     sigfillset(&mask);
>     sigdelset(&mask, SIGABRT);  /* mask has only SIGABRT turned off */
>     sigprocmask(SIG_SETMASK, &mask, NULL);
>     kill(getpid(), SIGABRT);    /* send the signal */
       ^^^^^ kill 1
> 
>     /*
>      * If we're here, process caught SIGABRT and returned.
>      */
>     fflush(NULL);               /* flush all open stdio streams */
>     action.sa_handler = SIG_DFL;
>     sigaction(SIGABRT, &action, NULL);  /* reset to default */
>     sigprocmask(SIG_SETMASK, &mask, NULL);  /* just in case ... */
>     kill(getpid(), SIGABRT);                /* and one more time */
       ^^^^ kill 2

>     exit(1);    /* this should never be executed ... */
> }
>  
> 

Just a wild guess... but if you read the above you'll see two kill 
statements, without conditionals around it, so my guess is that
even when the signal had already been send (kill 1), the information
regarding the pid etc remains in memory, and when you traverse the code,
it sends it again (kill 2).

my E0.02

-- 
/"\   Best regards,                      | remko at FreeBSD.org
\ /   Remko Lodder                       | remko at EFnet
  X    http://www.evilcoder.org/          |
/ \   ASCII Ribbon Campaign              | Against HTML Mail and News


More information about the freebsd-hackers mailing list