Marius Vollmer <[EMAIL PROTECTED]> writes:
> 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.
Marked asyncs are not handled until SCM_ASYNC_TICK is performed.
Previously, it was performed at each *ALLOW_INTS.
As a preparation for POSIX threading, I made this change:
2000-03-13 Mikael Djurfeldt <[EMAIL PROTECTED]>
* __scm.h (SCM_ALLOW_INTS, SCM_REALLOW_INTS): Removed call to
SCM_ASYNC_TICK. (This is a preparation for POSIX threads support,
and kind of an experiment: Will this cause problems?)
Probably, the change in behaviour we see is that, earlier, the signal
was actually handled by an SCM_ASYNC_TICK before take_signal is called
again. (Since I'm now visiting MIT, I have no time looking into the
details of this, however.)
The solution you suggest (non-continuable signals) seems good.