Hi,

after this function

    SCM_PROC(s_segfault, "segfault", 0, 0, 0, sim_segfault);

    SCM
    sim_segfault ()
    {
      *(int *)0 = 0;
      return SCM_UNSPECIFIED;
    }

has been added to libguile, I get this behaviour

    guile> (segfault)
    <hang>

Guile is in a loop, calling take_signal, marking the signal_async, and
then returning from the signal handler only to get the sig11 again,
without making any progress.

I don't know enough about Unix signals, and much less about how Guile
handles Unix signals, to know what to do about this.  I don't think
that Guile has always behaved in this way, but I can't say for sure.

I think that Guile should not return from its signal handler for
non-continueable signals, like SIGSEGV, SIGILL and SIGBUS.  It should
directly throw to wherever is appropriate.

Reply via email to