I came up with my own patch so I could kill -ABRT when I want
a core dump so I could debug at a later time.  It seemed to ignore
kill -SEGV and kill -ABRT.  If you are going make a change could
you make sure kill -ABRT makes it dump core and exit.

Here was the path that I was using:

% cat autofs-5.0.4-abortable
--- autofs-5.0.4/daemon/automount.c     2009-03-17 17:56:22.000000000 -0700
+++ autofs-5.0.4-hack1/daemon/automount.c       2009-03-17
17:56:57.000000000 -0700
@@ -1331,11 +1331,18 @@
                case SIGUSR1:
                        do_signals(master_list, sig);
                        break;
-
                case SIGHUP:
                        do_hup_signal(master_list, time(NULL));
                        break;

+               case SIGABRT:
+                       abort();
+                       break;
+
+               case SIGSEGV:
+                       abort();
+                       break;
+
                default:
                        logerr("got unexpected signal %d!", sig);
                        continue;


On Fri, Jun 19, 2009 at 12:06 PM, Jeff Moyer <[email protected]> wrote:

> Hi,
>
> Right now, the automount daemon blocks all signals.  We should at least
> unblock those that will cause us to dump core.  Otherwise, I think the
> behaviour could be, umm, interesting.
>
> I tested this by sending SIGBUS and SIGSEGV to the automount daemon.
>
> Cheers,
> Jeff
>
> Signed-off-by: Jeff Moyer <[email protected]>
>
> diff --git a/daemon/automount.c b/daemon/automount.c
> index 80691fa..04fa304 100644
> --- a/daemon/automount.c
> +++ b/daemon/automount.c
> @@ -1324,6 +1324,10 @@ static void *statemachine(void *arg)
>        sigfillset(&signalset);
>        sigdelset(&signalset, SIGCHLD);
>        sigdelset(&signalset, SIGCONT);
> +       sigdelset(&signalset, SIGBUS);
> +       sigdelset(&signalset, SIGSEGV);
> +       sigdelset(&signalset, SIGILL);
> +       sigdelset(&signalset, SIGFPE);
>
>        while (1) {
>                sigwait(&signalset, &sig);
> @@ -1817,6 +1821,11 @@ int main(int argc, char *argv[])
>        };
>
>        sigfillset(&allsigs);
> +       /* allow for the dropping of core files */
> +       sigdelset(&allsigs, SIGBUS);
> +       sigdelset(&allsigs, SIGSEGV);
> +       sigdelset(&allsigs, SIGILL);
> +       sigdelset(&allsigs, SIGFPE);
>        sigprocmask(SIG_BLOCK, &allsigs, NULL);
>
>        program = argv[0];
>
> _______________________________________________
> autofs mailing list
> [email protected]
> http://linux.kernel.org/mailman/listinfo/autofs
>
_______________________________________________
autofs mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/autofs

Reply via email to